【问题标题】:How to avoid Double values getting stored in 1Ex format?如何避免 Double 值以 1Ex 格式存储?
【发布时间】:2011-07-28 19:23:39
【问题描述】:

我有一个双变量:

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)。

【问题讨论】:

  • 1Ex格式是显示问题;无论哪种方式,该号码都以相同的方式存储。使用适当的格式字符串以您想要的方式显示数字。
  • 罗伯特,你能告诉我在这种情况下如何使用适当的字符串格式吗?

标签: java double


【解决方案1】:

double 实际上根本没有“保存”为字符串。这只是格式问题 - 您应该看到 DecimalFormat。但是,它绝对不会是 完全 0.000001,因为该数字不能完全表示为双精度数。我会强烈建议您使用BigDecimal,而不是在精确的十进制值很重要时(就像他们在这里所做的那样)。

【讨论】:

    【解决方案2】:

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

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

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

    如果您确实希望输出与输入匹配,您绝对应该注意此处答案中发布的其他建议并使用BigDecimal,因为某些浮点值不是什么 你认为它们是在计算机中表示它们时。 (参考:IEEE-754

    “Java Puzzlers”演示文稿有时会讨论这些奇怪的行为,并且始终是一种有趣的学习方式。 (见this talk from Google I/O 2011,3分钟后)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-04
      • 2016-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-02
      相关资源
      最近更新 更多