如何避免以1Ex格式存储Double值



我有一个双变量:

private double b=0.0;

我取b中某个字段的值(值在0.0到9.99999999之间)。大多数情况下,用户输入的值在0.0到1.0之间。

当我在'b'中保存用户的值时,如果值为0.000001,则它被保存为1E-6,下一次在屏幕上显示为相同(这是因为b是Double)。

是否有任何方法(只是通过调用一些方法)在Java中,我可以避免值转换为1E-6格式?我想保存用户输入的值(0.000001)

double实际上根本没有被"保存"为字符串。这只是格式化的问题—您应该看到DecimalFormat。然而,它肯定不会是完全 0.000001,因为这个数字不能完全表示为双精度数。当精确的十进制值很重要时,我强烈建议您使用BigDecimal(就像这里听起来的那样)。

这个数字确实不是用科学(E)记数法存储在内存中。

您可以通过在输出时对数字进行不同的格式化来演示这一点:

@Test
public void testLittle() {
    double myNum = 0.000001;
    System.out.printf("%f n",myNum);
}

如果你真的想要输出与输入匹配,你应该注意在这里的回答中发布的其他建议,并使用BigDecimal,因为一些浮点值不是什么当你在电脑上表现它们时,你会认为它们是。(ref: IEEE-754)

"Java Puzzlers"的演讲有时会讨论这些奇怪的行为,并且总是一种有趣的学习方式。(参见Google I/O 2011的演讲,3分钟后)

最新更新