当前位置: 首页 > 面试题库 >

来自Double的BigDecimal错误值?

解翰采
2023-03-14
问题内容

我试图从一个字符串做一个BigDecimal。不要问我为什么,我只需要它!这是我的代码:

Double theDouble = new Double(".3");
System.out.println("The Double: " + theDouble.toString());
BigDecimal theBigDecimal = new BigDecimal(theDouble);
System.out.println("The Big: " + theBigDecimal.toString());

这是我得到的输出?

The Double: 0.3
The Big: 0.299999999999999988897769753748434595763683319091796875

有任何想法吗?


问题答案:

创建双精度数时,值0.3不能精确表示。您可以从不带中间双精度字的字符串创建BigDecimal,如下所示:

new BigDecimal("0.3")

浮点数表示为二进制分数和指数。因此,有些数字无法准确表示。在以10为基数的数字中有一个类似的问题,例如1/3,即0.333333333 .....
1/3的任何十进制表示形式都不精确。这发生在二进制不同的分数集上,而0.3是二进制不精确的分数集之一。



 类似资料:
  • 问题内容: 当用的输入用和与输入不同的结果似乎出现。 x输出为 当y是 我说这是因为双重不准确性吗?但是由于这是一个,不应该一样吗? 问题答案: 我说这是因为双重不精确吗? 您绝对正确,这完全是由于的不精确。 但是由于这是一个,不应该一样吗? 不,不应该。在创建时就引入了错误,因为常量已经嵌入了错误。到那时,您无法采取任何措施来修复此表示错误:当时那匹众所周知的马已经离开了谷仓,所以现在关门已经太

  • 问题内容: 我必须计算一些浮点变量,而我的同事建议我使用而不是,因为这样会更精确。但是我想知道它是什么以及如何最大程度地利用它? 问题答案: 是表示数字的精确方法。A 具有一定的精度。由于幅值之差太大,求和时使用不同倍数(例如和)的双精度可能会导致它们一起下降。有了这不会发生。 的缺点是,它是较慢的,和它有点更难以程序算法的方式(由于不被过载)。 如果你要花钱,或必须精打细算,请使用。否则往往就足

  • 问题内容: 在Java中,我将k定义为 我从数据库中获取数据并使用循环添加相同的数据, 当我显示k时,我得到的价值为 因此,我在下面介绍了并将代码更改为 现在我得到新的总数,因为这是正确的。 问题1 好吧,问题是当我在其他地方使用它时,下面是我得到的 它应该显示为手动添加后得到。 它显示为的任何原因。 问题2 还有k为什么显示这么多十进制值的原因吗?以下是我为双变量k获得的不同值 我不明白有时它显

  • 描述 (Description) java.math.BigDecimal.valueOf(double val)使用Double.toString(double)方法提供的double的规范字符串表示将double转换为BigDecimal。 声明 (Declaration) 以下是java.math.BigDecimal.valueOf()方法的声明。 public static BigDec

  • 我正在尝试运行这里提供的kotlin代码的测试:https://github.com/ligi/ipfs-api-kotlingradlew 我收到了下面列出的错误。有人能告诉我这个错误是什么意思吗?

  • 问题内容: 在Java中,我想要一个双精度值并将其转换为a 并以一定的精度打印出它的String值。 它打印出这个巨大的东西: 47.47999999999999687361196265555918216705322265625 并不是 47.48 我进行转换的原因是有时double值将包含很多小数位(即),而将double转换为String时将产生科学计数法。我想以非科学计数法存储String值