• 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

  • 相关阅读:
    Vue——data中的属性规范
    python的字符串用法
    python笔录第一周
    Mac下python版本的更新
    我的第一篇博客
    C语言-控制语句(循环)
    C语言-控制语句(分支与跳转)
    C语言-函数
    C语言-数组与指针
    C语言-堆和栈
  • 原文地址:https://www.cnblogs.com/haopengchen/p/8461933.html
Copyright © 2020-2023  润新知