當初始化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方法比較大小。