JAVA中使用浮点数类型计算时,计算精度的问题

标题     在Java中实现浮点数的精确计算    AYellow(原作) 修改    
关键字     Java 浮点数 精确计算   
问题的提出:
如果我们编译运行下面这个程序会看到什么?
public class Test{
    public static void main(String args[]){
        System.out.println(0.05+0.01);
        System.out.println(1.0-0.42);
        System.out.println(4.015*100);
        System.out.println(123.3/100);
    }
};
你没有看错!结果确实是
0.060000000000000005
0.5800000000000001
401.49999999999994
1.2329999999999999
Java中的简单浮点数类型float和double不能够进行运算。不光是Java,在其它很多编程语言中也有这样的问题。在大多数情况下,计算的结果是准确的,但是多试几次(可以做一个循环)就可以试出类似上面的错误。现在终于理解为什么要有BCD码了。

......

原文地址:http://blog.csdn.net/pttaag/article/details/5912171

这个问题的确是平时工作中经常容易疏忽的一个问题,我自己总结了下,解决的思路有2个:

1.使用BigDecimal方法,构造可以精确计算的方法来解决精度问题(上文中推荐的方法)

2.无视精度计算,在做科学计算或者是工程计算时,在最终输出的时候,进行精度的保留小数点操作

                BigDecimal bigDecimal = new BigDecimal(requirementNum);//四捨五入保留四位小數
                requirementNum = bigDecimal.setScale(4,BigDecimal.ROUND_HALF_UP).doubleValue();

PS.方法2,我认为最好不要在JAVA端做,而是应该有前端根据实际业务,选择显示几位。所以推荐使用方法1去做

原文地址:https://www.cnblogs.com/xujanus/p/8036391.html