首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一个包可以实现非常大的、高精度的数字?

有没有一个包可以实现非常大的、高精度的数字?
EN

Stack Overflow用户
提问于 2011-10-24 01:19:27
回答 3查看 970关注 0票数 0

我发现我需要计算高精度的大数字。例如: 5422300.8452。存储此数据的最佳方式是什么,以便简单的算术运算符可以对其执行操作?我一直在尝试组合Long和Double,但经过大量的计算后,它变得复杂起来。我相信有一个简单的解决方案,我只是还不是很有见识。

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

代码语言:javascript
复制
Double Remain = (double) Math.round((double quantity/12)*10000)/10000;

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

所以我基本上需要将数字除以长度,然后取2的模除以分母,并对结果进行舍入。然后添加2。

它起作用了!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-24 09:22:44

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

代码语言:javascript
复制
Double Remain = (double) Math.round((double quantity/12)*10000)/10000;

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

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

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

换句话说,我需要能够处理相同大小的数字,而不管商的小数位数是多少。

为此,我获取用户输入,并将其除以文字(12)。然后我用同样的方法取模数除以12,然后像这样把2拼凑在一起:

代码语言:javascript
复制
Quotient.toString() + Remainder.toString().substring(1)
票数 0
EN

Stack Overflow用户

发布于 2011-10-24 01:21:35

BigInteger and BigDecimal就是你要找的类。不过,您不能使用简单的算术运算符,因为Java中不存在运算符重载。但这些类具有所有简单操作所需的方法。

票数 6
EN

Stack Overflow用户

发布于 2011-10-24 02:00:26

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

代码语言:javascript
复制
BigDecimal x = new BigDecimal(45);
BigDecimal y = new BigDecimal(12);
BigDecimal result = x.divide(y);

这就是JB Nizet所描述的缺点,不能使用运算符,所以

代码语言:javascript
复制
BigDecimal x = new BigDecimal(45);
BigDecimal y = new BigDecimal(12);
BigDecimal result = x/y;

行不通的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7867763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档