Java中的高精度整数和高精度小数
在实际编码中,会遇到很多高精度的事例,比如,在计算金钱的时候就需要保留高精度小数,这样计算才不会有太大误差:
在下面的代码中,我们验证了,当两个float型的数字相加,得到的结果和我们的预期结果是有误差的,为了减小和防止这种误差的出现,我们需要使用BigInteger类和BigDecimal类来计算。
package com.ietree.base.number; import java.math.BigDecimal;
import java.math.BigInteger; public class BigIntegerTest { public static void main(String[] args) {
float f1 = 123.01f + 2.01f;
// 预期输出:125.02,实际输出:125.020004
System.out.println(f1);
// 预期输出:125.02,实际输出:125.02000000000001
System.out.println(123.01 + 2.01);
System.out.println("==============================="); // 高精度整数测试
BigInteger bint1 = new BigInteger("125");
BigInteger bint2 = new BigInteger("999");
BigInteger tmp;
// 相加
tmp = bint1.add(bint2);
System.out.println("bint1 + bint2 = " + tmp);
// 相减
tmp = bint2.subtract(bint1);
System.out.println("bint2 - bint1 = " + tmp);
// 相乘
tmp = bint1.multiply(bint2);
System.out.println("bint1 * bint2 = " + tmp);
// 相除
tmp = bint2.divide(bint1);
System.out.println("bint2 / bint1 = " + tmp);
// 求余数
tmp = bint2.remainder(bint1);
System.out.println("bint2 % bint1 = " + tmp);
// 求次方
tmp = bint2.pow(2);
System.out.println("bint2的二次方 = " + tmp);
System.out.println("======================================"); // 高精度小数测试
BigDecimal bd1 = new BigDecimal(123.01);
BigDecimal bd2 = new BigDecimal(2.01);
BigDecimal bd;
// 相加
bd = bd1.add(bd2);
System.out.println("bd1 + bd2 = " + bd);
// 相减
bd = bd1.subtract(bd2);
System.out.println("bd2 - bd1 = " + bd);
// 相乘
bd = bd1.multiply(bd2);
System.out.println("bd1 * bd2 = " + bd);
// 相除
// bd = bd1.divide(bd2);
bd = bd1.divide(new BigDecimal(2.0));
System.out.println("bd1 / 2.0 = " + bd);
// 求余数
bd = bd1.remainder(bd2);
System.out.println("bd2 % bd1 = " + bd);
// 求次方
bd = bd1.pow(3);
System.out.println("bd2的三次方 = " + bd);
System.out.println("======================================"); // 四舍五入保留小数位数
BigDecimal bd3 = new BigDecimal(123.01).setScale(5,5);
System.out.println("bd3 = " + bd3);
}
}
Java中的高精度整数和高精度小数的更多相关文章
- [转] 有关java中两个整数的交换问题
转载申明:本文主要是用于自己学习使用,为了完善自己的只是框架,没有任何的商业目的. 原文来源:有关Java中两个整数的交换问题 如果侵权,麻烦告之,立刻删除. 在程序开发的过程,要交换两个变量的内容, ...
- Java中最小的整数为什么是-2147483648
Java中最小的整数为什么是-2147483648 假如只有两位来表示数字,第一位是符号位: 00:0 01:1 11:-1,这个是负数,而且是补码,取反为00,加1成为01,就是-1 10:-2,这 ...
- 【Java编程】Java中的大整数计算
在上一篇文章中,我们实现了c语言中的大整数的运算,并且用Miller-Rabin算法实现了对大素数的测试.本来我准备用Java代码实现大整数的运算,查了一下资料发现Java中java.math的Big ...
- JAVA中IP和整数相互转化(含有掩码的计算)
import java.net.InetAddress;/** * 用于IP和整数之间的相互转换 * @author Andy.Wang * */public class IPv4Util { ...
- java中double类型显示两个小数,比如12.00
Double类型的数据如何保留两位小数? 各位大虾,现有Double类型的数据,如何转换为保留两位小数的数,返回值的类型仍然是Double类型的,而不是字符串类型. 比如 0,返回“0.00” ...
- java中对除法取2位小数的一点试验
如下程序, double a = 12.3333333,b = 11.22222222222; double c = 0; String d = String.format("%.2f&qu ...
- Java中面向对象的理解
按照惯例,先做一个简单的介绍,现在开始学习 Thinging in Java 4 ,一边看,一边记录,我都不想给自己设定时间安排了,毕竟很少实现过.所以就这样吧!不定期的更新,我都会放到博客中的. 所 ...
- java中小数的处理:高精度运算用bigDecimal类,精度保留方法,即舍入方式的指定
一. 计算机的小数计算一定范围内精确,超过范围只能取近似值: 计算机存储的浮点数受存储bit位数影响,只能保证一定范围内精准,超过bit范围的只能取近似值. java中各类型的精度范围参见:http: ...
- 【转】Java判断是否是整数,小数或实数的正则表达式
经常会遇到这样的情况,需要判断一个字符串是否是一个合法的数,包括整数,小数或者实数. 网上查到很多文章大多是判断这个字符串是否全为数字,比如下面这段来自StringUtils的代码,可以看到,13.2 ...
随机推荐
- AJAX的中文乱码问题
/***********本人原创,欢迎转载,转载请保留本人信息*************/作者:wallimn电邮:wallimn@sohu.com博客:http://blog.csdn.net/wa ...
- CSS3制作文字半透明倒影效果
效果如图.Ps.背景线条是背景图勒,和本文效果无关... html代码如下: <div class="content"> <h3 title="专业 ...
- php -- php数组相关函数
array range ( mixed $low , mixed $high [, number $step ] ) 创建一个连续的数组 range('a','z'); foreach (range( ...
- PyQt5资料
http://bbs.fishc.com/thread-59816-1-1.html https://pypi.python.org/pypi/PyQt5/ http://www.thehackeru ...
- 学习:java代码检测
转自:http://zh.wikipedia.org/wiki/%E4%BB%A3%E7%A0%81%E5%BC%82%E5%91%B3 对于Java开发语言,有些工具,比如Checkstyle.PM ...
- ssh免密码登录的几个注意事项
1, authorized_keys文件中每个公钥占一行,不能分成多行. 2,文件夹默认权限为600 3,如果遇到奇怪的问题,可以把.ssh/文件全部删掉,重新用ssh-keygen生成.
- ACM计算几何模板——二维几何基础(基本运算,点和线,多边形)
/*==========================*\ | 计算几何基础函数 | | 1.点和向量的定义 | | 2.向量的基本运算 | | 3.点积 | | 4.向量长度 | | 5.两向量角 ...
- JavaScript------创建节点
代码: <script type="text/javascript"> var i = 0; function add(){ var inputNode = docum ...
- 编程之美 set 2 精确表达浮点数
有限小数和无限循环小数转化成分数 比如 0.9 -> 9/10 0.333(3) -> 1/3 解法 1. 主要涉及到一个数学公式的计算. 2. 对于有限小数, 分子分母求最大公约数即可 ...
- OpenSSL学习笔记
SSL缺省只进行server端的认证,客户端的认证是可选的.以下是其流程图(摘自TLS协议). 加密算法介绍: 对称加密: DES:date encrption standard,56bit 3DES ...