java,
分享于 点击 24835 次 点评:258
java,
涉及到金额的计算时,相信很多人都会遇到比较头疼的精度问题。因为计算机的数字表示只是差强人意,比如67.89,计算机可能认为是67.900000000001,这就给最终的运算带来误差。
碰到这样的问题,有2种方法,一是使用更大精度的差值来屏蔽,二则是通过Bigdecimal这个对象来计算。
对于第一种,只能在某些判断条件下使用,如:
Math.abs(data1-data2)>0.001 即可。data1和data2是double类型的
对于第二种,则是比较保险,稳健的处理方式,如:
Bigdecimal d1 = new Bigdecimal(33.56);
Bigdecimal d2 = new Bigdecimal(45.6);
//参数分别是:除数,精度,结果进位方式(这里是四舍五入)
double resule = d1.divide(d2,4,Bigdecimal.ROUND_HALF_UP).doubleValue();//结果是1.3588
当然我们可以无精度损失地简单地设置某一个数值:
Bigdecimal tt = new Bigdecimal(43.344949944);
tt = tt.setSacle(2,Bigdecimal.ROUND_HALF_UP);
double d = tt.doubleValue();
tt = null;//释放对象
补充:对于加减法,也会出现很长一串的字符精度问题,需要对最终的运行结果设置精度,再进行doubleValue的转换
相关文章
- 暂无相关文章
用户点评