添加浮点值会导致意外结果

时间:2012-02-03 08:02:45

标签: java floating-point

我想添加两个巨大的浮动值,但我得到的结果有点偏离。让我用一个例子来解释:

String bi = "32323222.02";
float spend=0.00f;
spend = (Float.parseFloat(bi));

String si = "23232322.32";
float spend1=0.00f;
spend1 = (Float.parseFloat(si));

float spendSum=0.00f;
spendSum= spend+spend1;

System.out.println(spendSum);

现在结果是5.5555544E7,而我想要一个像55555544.34这样的答案。关于我可能在一个例子中做错的任何建议都会有所帮助。

2 个答案:

答案 0 :(得分:3)

spend1 = (Float.parseFloat(bi));

你可能想在这里解析si。这解释了您获得的结果:您的计划将32323222.02添加到32323222.02

答案 1 :(得分:2)

浮点不准确。这是因为在任何范围内都有无数个有理数,但你只有有限的位数来代表它们。

如果您想要完全准确,则应使用BigDecimal

有关浮点问题的更多信息可以在这篇[有点复杂的]文章中找到:What Every Computer Scientist Should Know About Floating-Point Arithmetic

编辑:感谢@ComplicatedSeeBio的评论,我没有注意到结果已经过时了。他的回答提到为什么差异是20%的折扣。但是,即使没有“编程错误” - 由于浮点问题,您仍然无法获得预期的结果。