【问题标题】:Precision error when parsing a double variable using StringTokenizer in Java在 Java 中使用 StringTokenizer 解析双精度变量时出现精度错误
【发布时间】:2011-03-21 22:22:31
【问题描述】:

我正在使用 StringTokenizer 类来读取文本文件。在文本文件中,有几个双精度值。

interest = Double.parseDouble(aString.nextToken());
System.out.println(interest);

它在控制台中显示正常,但是当我稍后尝试打印时,

System.out.println("Fixed Daily Interest = " + customers[i].get_interest() + "\n");

精度总是丢失小数点。例如,其中一个值是 0.055,当我在代码的第一部分解析它后打印它时,它会完全显示在控制台中。然而,在另一种方法中,无论我尝试什么,尝试打印它都会给我 0.05,而不是将其解析为双变量,使用 DecimalFormat 等。任何善良的灵魂会指导我我在这里犯的错误是什么?我真的很困惑。

【问题讨论】:

    标签: java parsing double stringtokenizer


    【解决方案1】:

    您可以使用 DecimalFormat 在 Java 中获得精度。

    阅读更多关于这方面的内容发现了这个post,它可能会给你一些指示。基本上,如果您需要更高的精度,您将需要转移到一个专门设计的类来处理这个问题。该帖子列出了几个选项。

    【讨论】:

    • 是的,我试过了,但它不起作用。我将双精度值保存在对象数组中的变量中,这会影响什么吗?
    • 嗨@Jason,做了更多的搜索并用一篇可能对你有帮助的文章更新了我的帖子。基本上,您需要将数据类型从 double 更改为其他类型。 Java 原语页面特别建议不要使用 double 作为百分比。
    【解决方案2】:

    如果您需要额外的精度,请尝试使用BigDecimal。如果问题是读取双精度值,然后打印输出不同的值,请记住二进制 十进制数字表示的问题。一些十进制数不能以二进制精度有限的二进制格式表示。此外,当使用数字进行操作时,有时会打印结果为 4,99997 而不是十进制 5,问题在于该数字以二进制表示。

    确保数字是从不触摸的,那么打印它的输出必须始终相同,如果你使用toString()或直接在System.out.println("" + number);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-09
      • 1970-01-01
      相关资源
      最近更新 更多