我有一个双变量:
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分钟后)