我正在嘗試使用BigDecimal來計算GST稅率。BigDecimal分部
稅款計算應該是1/11 *項目價格。
所以我想我應該使用BigDecimal來給出最準確的表示。但由於某種原因,費率總是被計算爲零。
這是我已經試過:
BigDecimal TAX_RATE = new BigDecimal("1")
.divide(new BigDecimal("11"), BigDecimal.ROUND_HALF_UP);
BigDecimal bd = new BigDecimal("10").multiply(TAX_RATE);
// gives 0
有誰知道爲什麼嗎?
非常小的nit,但要記住 - BigDecimal.ONE和BigDecimal.TEN以常量存在。您還可以找到scaleByPowerOfTen([javadoc](http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html#scaleByPowerOfTen(int))),以便有用而不是乘以十。雖然,那與你所遇到的問題無關。 – 2014-12-13 02:26:42
如果您將物品價格除以11而不是乘以代表1/11的值,您將得到更準確的結果。這是因爲'BigDecimal'不能完全代表1/11(.090909090 ...),因爲您的計算機沒有足夠的內存來保存整個重複小數。 :)最終,如果物品價格足夠大,你會得到一個舍入誤差。 – ajb 2014-12-13 02:29:35
好的,謝謝,是的,我會修改代碼將價格除以11,這個好主意。邁克爾 - 「10」只是隨意的,與計算無關,只是一個示例。乾杯。 – 2015-01-07 04:14:52