任意预设精度小数(几乎与BigDecimal一样)

时间:2014-02-26 05:20:35

标签: java performance

我希望有一个java类,它将保存一个具有任意预设精度的十进制值。类BigDecimal看起来是一个很好的候选者作为起点,但我希望能够将小数的大小限制为最终用户决定的任何内容。从字面上讲,最终用户将在基数10中指定一个范围,我将分配足够的字节来表示该范围内的任何数字。

我在想一个扩展BigDecimal的课程。在这个类中,我将添加模拟预设范围内的小数所需的函数。

我对社区的问题是: 有没有图书馆已经这样做了?
延长BigDecimal是否合理?

2 个答案:

答案 0 :(得分:3)

我建议您在提出的提案之间采用中间方式:

Apfloat图书馆是一种很好的尝试方式,请查看API docs Apcomplex是一个包装类,例如一个BigDecimal

所以在这里,你可以有一个很大的自由来覆盖和增强刚刚应用这个类的新方法。

答案 1 :(得分:1)

有趣的是,BigDecimal已经拥有了你需要的一切。简单方法添加(BigDecimal),乘法(BigDecimal)等。工作时无限精度。

方法add(BigDecimal,MathContext),multiply(BigDecimal,MathContext)等。允许在结果尾数应该具有的位数上指定请求的上限。

所以基本上你会在结果中得到结果:

sign * mantissa * 10^exponent

保证0=< mantissa < 10^requested。这些方法根据MathContext中指定的mode进行舍入。