我正在考慮爲BigDecimal編寫兩個有限精度的替代方案,即DecimalInt和DecimalLong。這些將能夠處理int和real的邊界內的數字,並且具有任意數量的小數位,可以以可變和不可變形式創建。我的計劃是使DecimalInt支持+/- 999,999,999到+/- 0.999999999和DecimalLong相同,但最多可以有18位數。輕量級Java十進制類
這可以通過保持DecimalInt的十進制數字計數值爲0-9,並將DecimalLong的0-18保持爲存儲爲縮放的int或long的實際值。正常使用將用於小數小數點,例如貨幣和股票價格,通常是小數點後2-4位。基本要求是(a)精簡足跡(2個類別,加上OverflowException),和(b)全面支持所有基本操作以及所有有意義的數學運算。
谷歌搜索結果沒有返回任何明顯的命中 - 它們似乎都與任意小數有關。
我的問題是:這已經完成了嗎?這是否有隱藏的微妙之處,這就是爲什麼它尚未完成?有沒有人聽說過Java支持像DotNet這樣的十進制類型的傳言。
編輯:這與BigDecimal不同,因爲它應該是(a)更高效地處理整數數組,並且(b)它不會包裝BigInteger,因此它會更精簡記憶也(c)它會有一個可變的選項,所以它也會更快。總之 - 簡單用例的開銷較小,例如「我想存儲銀行餘額,而沒有BigDecimal的開銷和雙倍的不準確性」。
編輯:我打算做使用int或長的所有數學避免經典的問題:1586.60-708.75 = 877.8499999999999代替877.85
「已經這個已經做了什麼?」你提出的類和BigDecimal有什麼不同? – 2008-12-09 20:12:05
當你說「具有任意數量的小數位數」時,你的意思是說你有一個固定的小數位數,或者你希望能夠支持任意數量的小數位數? – DJClayworth 2008-12-10 14:25:01
寫它可能會更快,而不必處理人們在這裏誤解你的問題。 – jmucchiello 2008-12-11 03:42:05