gpt4 book ai didi

java - 如何在不损失精度的情况下处理非常小的 float ?

转载 作者:行者123 更新时间:2023-12-01 07:31:23 25 4
gpt4 key购买 nike

我在这里和那里阅读了有关如何处理大数字的解释,似乎同一类 BigNumber 也可以用于非常小的数字。

但是我无法弄清楚如何使其在不损失精度的情况下工作。

我有像 0.0000000000012 这样的数字,我想在方程中使用它,但我不知道如何用 BigNumber 创建这个数字(如果这是我应该使用的),然后如何避免在我将其转换为在我的等式中使用 double。

我是否应该将方程中使用的每个数字都作为 BigDecimal(即使是具有简单值(12、0.1、...)或只有 0.0000000000012 的数字也应该是 BigNumber,并且我可以确定不会丢失精度?

预先感谢您的帮助,问候,B.

最佳答案

使用类 BigDecimal 。它可用于表示任意精度的十进制数。要从过于精确而无法用 double 表示的文字创建 BigDecimal,请使用字符串构造函数:

BigDecimal almostOne = new BigDecimal("0.999999999999999999999999999999999999999987", MathContext.UNLIMITED);

当你将它们转换为 double 时,你会失去精度。因此,BigDecimal 类有多种方法可以在保持精度的同时执行基本算术:

BigDecimal exactlyTen = new BigDecimal(10);
BigDecimal almostTen = almostOne.multiply(exactlyTen);

当您的代码对性能至关重要时,我建议您进一步阅读问题“What to do with Java BigDecimal performance? ”。

关于java - 如何在不损失精度的情况下处理非常小的 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17190957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com