天天看點

BigDecimal建立初始化值類型對比

當初始化String類型和double類型,入參值相同,對比輸出值

​<code>​ ​</code>​

​<code>​BigDecimal bigDecimalStr = new BigDecimal("0.1");​</code>​

​<code>​BigDecimal bigDecimalDou = new BigDecimal(0.1);​</code>​

​<code>​System.out.println("bigDecimalStr: " + bigDecimalStr);​</code>​

​<code>​System.out.println("bigDecimalDou: " + bigDecimalDou);​</code>​

​<code>​System.out.println("bigDecimalStr and bigDecimalDou: " + bigDecimalStr.compareTo(bigDecimalDou));​</code>​

​<code>​ ​</code>​輸出結果:

​<code>​bigDecimalStr: 0.1​</code>​

​<code>​bigDecimalDou: 0.1000000000000000055511151231257827021181583404541015625​</code>​

​<code>​bigDecimalStr and bigDecimalDou: -1​</code>​

對比結果,即String類型和double類型,double類型會使值變成64位失真。

在開發過程中,金額存儲小數的方式很常見,我們可以采用String入參的形式定義BigDecimal(如果可以的話,将金額弄成整數在顯示的時候除以位數,擷取真正的金額)

使用compareTo方法比較兩個金額的大小關系時:0表示相等,-1表示小于,1表示大于(上面那個例子就可以充分說明大小關系的比較)。在比較BigDecimal類型時,無法直接使用equals方法比較兩個值是否相等,不過可以采用将金額轉成字元串通過equals方法比較大小。