考慮到BigDecimal(double)
的行爲是正確的,在我看來,我不太確定它真的會出現這樣的問題。
我不會正好與在BigDecimal(double)
構造的文件的措辭達成一致:
此構造方法的結果可能會有所 不可預知。有人可能會 認爲用Java編寫new BigDecimal(0.1)
創建 BigDecimal
這正好等於 0.1
(的1
未測量的值,用1
規模),但它實際上等於 是 0.1000000000000000055511151231257827021181583404541015625
。
(着重號。)
與其說不可預知,我覺得寫法應該是意外,即使如此,這將是對於那些誰不知道的侷限性,意外行爲用floating point values表示十進制數字。
只要記住浮點值不能精確地表示所有十進制值,使用BigDecimal(0.1)
即0.1000000000000000055511151231257827021181583404541015625
返回的值實際上是有意義的。
如果由BigDecimal(double)
構造函數實例化的對象BigDecimal
是一致的,那麼我會爭辯說結果是可預測的。
我爲什麼不推薦使用BigDecimal(double)
構造函數是因爲行爲可以被認爲是正確的,並且只要知道浮點表示如何工作,構造函數的行爲就不足爲奇了。
好點,它就像一個毫無戒心的開發者的地雷。長遠來看,地雷從來不會爲任何人服務......這就是爲什麼JSR我猜... – 2009-06-29 05:59:30