zoukankan      html  css  js  c++  java
  • 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去做

  • 相关阅读:
    NET打包時加入卸载功能
    c#水晶报表注册码
    sqlserver:某年份某月份 是否在某时间段内的函数
    修改KindEditor编辑器 版本3.5.1
    Flash大文件上传(带进度条)
    让.Net程序脱离.net framework框架运行的方法(转载)
    夏天到了,什么时候园子的T恤可以出来?
    VS2005项目的安装与布署
    解决Select覆盖Div的简单直接的方法
    .Net向Page和UpdatePanel输出JS
  • 原文地址:https://www.cnblogs.com/xujanus/p/8036391.html
Copyright © 2011-2022 走看看