zoukankan      html  css  js  c++  java
  • 为什么要用BigDecimal

    一般货币计算的时候都要用到BigDecimal类,为什么一般不适用float或者double呢?

    先看一下浮点数的二进制表示:

    小数 0.125

    0.125 * 2 = 0.25

    0

    0.25 * 2 = 0.5

    0

    0.5 * 2 = 1

    1

    算法是 *2 直到没有小数为止  ,得到0.125 二进制表示为0 . 0 0 1 

    小数 0.9

    0.9 * 2 = 1.8 

    取整数部分 1

    0.8(1.8的小数部分) * 2 = 1.6   

    1

    0.6 * 2 = 1.2  

    1

    0.2 * 2 = 0.4  

    0

    0.4 * 2 = 0.8  

    0

    0.8 * 2=1.6

    1

    0.6 * 2 =1.2  

    0

    …..

    ….

    从上至下:1 1 1 0 0 1 0 ......

    计算过程无限循环,乘以2永远不可能消灭小数部分,这就证明,小数的二进制有时并不能精确表示;

    这就如同十进制不能表示1/3一样;

    货币类计算要求精度较高,非常大量的,很小的精度误差也会积少成多变成大误差,所以需要用到BigDecimal。


    参考:https://blog.csdn.net/tfstone/article/details/81392540

  • 相关阅读:
    GDUFE ACM-1050
    hdu-2020
    hdu-2055
    hdu-2734
    GDUFE ACM-1145
    GDUFE ACM-1127
    GDUFE ACM-1126
    GDUFE ACM-1125
    GDUFE ACM-1124
    GDUFE ACM-1123
  • 原文地址:https://www.cnblogs.com/jayworld/p/10107335.html
Copyright © 2011-2022 走看看