是否有一个实现超大,高精度数字的包?

时间:2011-10-23 17:19:27

标签: java android variables double long-integer

我发现我需要计算大数到高精度。例如:5422300.8452。存储此数据的最佳方法是什么,以便简单的算术运算符可以对其进行操作?我一直在努力做Longs和Doubles的组合,但经过大量的计算后它变得复杂了。 我确信有一个简单的解决方案,我还不是那么知识渊博。

好基本上,我弄清楚了: 我的问题是我想保持4位小数的精度,但输入一个高位数开始截断数字。例如,我有这个:

Double Remain = (double) Math.round((double quantity/12)*10000)/10000;

这适用于较小的数字,但900000000仍然被截断为7.5。

所以我基本上需要将数字除以 然后取2的模数并用分母除以,并将结果四舍五入。 然后添加2。

有效!

3 个答案:

答案 0 :(得分:6)

BigInteger and BigDecimal是您正在寻找的课程。但是,您将无法使用简单的算术运算符,因为Java中不存在运算符重载。但是这些类具有所有简单操作所需的方法。

答案 1 :(得分:1)

我不确定我是否理解你的后续问题,但为了划分,代码可能如下所示:

BigDecimal x = new BigDecimal(45);
BigDecimal y = new BigDecimal(12);
BigDecimal result = x.divide(y);

这是JB Nizet描述的缺点,不能使用任何操作符,所以

BigDecimal x = new BigDecimal(45);
BigDecimal y = new BigDecimal(12);
BigDecimal result = x/y;

无效。

答案 2 :(得分:0)

好基本上,我弄清楚了: 我的问题是我想保持4位小数的精度,但输入一个高位数开始截断数字。例如,我有这个:

Double Remain = (double) Math.round((double quantity/12)*10000)/10000;

这适用于较小的数字,但900000000仍然被截断为7.5。

所以我基本上需要将数字除以 然后取2的模数并除以。

如果解释我试图做的目的,也许会有所帮助。我希望代码显示特定数量的有效数字。如果我使用Double作为变量来存储要分割的用户输入,则许多数字可能会被截断(取决于产生的小数位数。)我需要一种方法来标准化整数中变量的范围,同时保持精确到4位小数。

换句话说,无论商数占多少小数,我都需要能够处理相同的大小数。

为了做到这一点,我接受用户输入,并用文字(12)除以。 然后我以相同的方式取模数并将模数除以12。 然后我就像这样把2拼凑起来:

Quotient.toString() + Remainder.toString().substring(1)