Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中使用StringTokenizer解析双变量时出现精度错误_Java_Parsing_Double_Stringtokenizer - Fatal编程技术网

在Java中使用StringTokenizer解析双变量时出现精度错误

在Java中使用StringTokenizer解析双变量时出现精度错误,java,parsing,double,stringtokenizer,Java,Parsing,Double,Stringtokenizer,我正在使用StringTokenizer类读取文本文件。在文本文件中,有两个双值 interest = Double.parseDouble(aString.nextToken()); System.out.println(interest); 它在控制台中显示良好,但是当我稍后尝试打印它时 System.out.println("Fixed Daily Interest = " + customers[i].get_interest() + "\n"); 精度总是损失一个小数点。例如,其中

我正在使用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获得精度


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

如果需要更高的精度,请尝试使用
BigDecimal
。如果问题是读取一个双精度值,然后打印输出一个不同的值,请记住二进制十进制数表示的问题。有些十进制数不能以二进制格式表示,且二进制精度有限。此外,当对数字进行运算时,结果有时可以打印为499997而不是十进制5,问题在于该数字的二进制表示形式


如果使用
toString()
或直接在
System.out.println(“+number”)中打印,请确保从未触摸过该数字,则打印该数字的输出必须始终相同

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