zoukankan      html  css  js  c++  java
  • float、double、BigDecimal的一些精度问题


    float f = 280.8f;
    System.out.println(f*100);
    结果是什么?
    结果是:28080.0f(我是这么想的)
    实际结果是:28079.998

    既然float处理有问题换double会不会有问题呢?
    double f = 280.8d;
    System.out.println(f*100);
    结果是:28080.0
    结果神奇般的达到了预期!是不是换double就好了呢?
    再试一下
    double f = 280.71d;
    System.out.println(f*100);
    结果是:28070.999999999996
    是不是很坑呢?

    再提供一种处理方式
    BigDecimal d = new BigDecimal("280.71");
    System.out.println(d.multiply(new BigDecimal("100")).doubleValue());
    结果是:28071.0
    再试试其他数据貌似也没问题了。

    问题原因分析:280.8是十进制数据,计算机使用二进制数据表示。浮点数精度7位,double类型精度15位,BigDecimal API上的解释 Immutable, arbitrary-precision signed decimal numbers.
    所以简单来说float存在精度丢失。double也存在,只是存在范围不同。BigDecimal能保存最大精度。涉及到计算非常在意精度请使用BigDecimal

  • 相关阅读:
    查询类里面对象个数
    动手动脑2
    关于随机数的产生-动手动脑1
    单词频率代码测试
    反码补码报告
    动手动脑课上总结
    java开学第一周测试代码
    【P1825】表达式整除
    工程代码の初體驗
    差分:IncDec Sequence 差分数组
  • 原文地址:https://www.cnblogs.com/haopengchen/p/8461933.html
Copyright © 2011-2022 走看看