2011-03-21 52 views
0

我正在使用StringTokenizer类来读取文本文件。在文本文件中,有一些double值。然而使用Java中的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等。任何善良的灵魂都会指导我在这里犯的错误是什么?我真的很困惑。

回答

1

您可以使用DecimalFormat来获得Java的精度。

多读一点发现这post这可能会给你一些指针。基本上,如果你需要更高的精度,你需要转到一个专门设计的类来处理这个问题。这篇文章列出了几个选项。

+0

是的,我试过了,但它不起作用。我将double值保存在一个对象数组中的变量中,会影响任何内容吗? – Jason 2011-03-21 22:40:31

+0

嗨@Jason,做了一些更多的搜索和更新我的文章,可能会帮助你的文章。基本上你需要将你的数据类型从double改为别的。 Java基元页面特别建议不要在百分比中使用double。 – Rasika 2011-03-21 23:16:08

0

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

确保数为从未感动,然后打印它必须总是相同的,如果您在使用System.out.println("" + number);toString()直接输出。