2014-02-26 56 views
6

我正在尋找一個java類,它將保存一個任意的預設精度的十進制值。類BigDecimal看起來是一個很好的候選者,但我希望能夠將小數的大小限制在最終用戶決定的範圍內。從字面上看,最終用戶將以10爲基數指定一個範圍,我將分配足夠的字節來表示該範圍內的任何數字。任意預置精度小數(幾乎像BigDecimal)

我正在考慮擴展BigDecimal。在這個課程中,我將添加模擬一個預設範圍內的小數的必要功能。

我對社區的問題是: 是否有任何庫已經這樣做?
會延長BigDecimal是合理的事情嗎?

+0

指定範圍?最大值?最大絕對值?小數位數?小數位數?請注意,這個問題中有沒有任何圖書館的內容是無關緊要的。 – EJP

+1

請注意,BigDecimal已經具有一個比例值,當它爲正值時,本質上限制了小數點右邊的位數。您還可以提供[MathContext](http://docs.oracle.com/javase/7/docs/api/java/math/MathContext.html)以保持此比例。 – Gassa

+0

那麼,您需要從現有行爲中得到什麼區別?如果它是性能,如標籤所示,小數的預期長度是多少?成千上萬的?更重要的是,你有沒有在你的使用案例中對BigDecimal進行基準測試,並確認這個瓶頸恰恰在於它們如何處理規模? – Gassa

回答

3

我建議你中間的方式在你提出的建議之間:

Apfloat庫是嘗試着,檢查了API docs的好辦法。
Apcomplex是一個包裝類,用於例如一個BigDecimal

所以在這裏,你將有一個很大的自由,重寫和增強剛剛應用這個類的新方法。

1

有趣的是,BigDecimal擁有您所需要的一切。簡單的方法添加(BigDecimal),乘(BigDecimal)等等。以無限的精度工作。

方法add(BigDecimal,MathContext),multiply(BigDecimal,MathContext)等等。允許指定一個請求的上限位數,得到的尾數應該有。

所以基本上你得到的結果早在形式:

sign * mantissa * 10^exponent 

有了保證0=< mantissa < 10^requested。這些方法根據MathContext中指定的mode進行舍入。