我想添加两个巨大的浮动值,但我得到的结果有点偏离。让我用一个例子来解释:
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
这样的答案。关于我可能在一个例子中做错的任何建议都会有所帮助。
答案 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%的折扣。但是,即使没有“编程错误” - 由于浮点问题,您仍然无法获得预期的结果。