Java 浮點數相加

  剛剛遇到個需求,須要對金額求和,上線的時候才知道這時個,這個字段是個小數。程序員

  隨手就改了個Double ,而後,跑下,沒啥問題,直接上線了spa

  而後,就fuck 了.net

  加出一大堆的小數,大概是這樣的code

 

package com.venn.demo;

public class DoublePlus {

    public static void main(String[] args) {
        double d1 = 0.01;
        double d2 = 0.01;

        for (int i=0; i< 10; i++){
            d2 += d1;
            System.out.println(d2);
        }
    }
}

我覺得的輸出是這樣的:blog

0.02
0.03
0.04
0.05
0.06
0.07
0.08
0.09
0.10
0.11

實際是這樣的:ci

0.02
0.03
0.04
0.05
0.060000000000000005
0.07
0.08
0.09
0.09999999999999999
0.10999999999999999

一臉懵逼的看完一篇博客,似懂非懂的:程序員必知之浮點數運算原理詳解get

結論就是:博客

   不少十進制小數在轉換成二進制時,並不能精確表示,只能是近似值。class

 

解決辦法就是使用BIgDecimal原理

public static void bigDecimalDemo(){


        BigDecimal b1 = new BigDecimal("0.01");
        BigDecimal b2 = new BigDecimal("0.01");

        for (int i=0; i< 10; i++){
            b2 = b2.add(b1);
            System.out.println(b2);
        }

    }

輸出以下:

0.02
0.03
0.04
0.05
0.06
0.07
0.08
0.09
0.10
0.11
相關文章
相關標籤/搜索