[英]Adding floating-point values, result unexpected
我想添加兩個巨大的浮點值,但得到的結果有點偏離。 讓我用一個例子來解釋:
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
的答案。 關於我可能在一個示例中做錯了什么的任何建議都將有所幫助。
spend1 = (Float.parseFloat(bi));
您可能想在此處解析si
。 這說明了您得到的結果:程序將32323222.02
添加到32323222.02
。
浮點數不精確。 這是因為在任何范圍內都有無限數量的有理數,但是只有有限數量的位來表示它們。
如果要精確,則應使用BigDecimal 。
有關浮點問題的更多信息,可以在這篇[有點復雜]的文章中找到: 每位計算機科學家都應了解的有關浮點算法的知識
編輯 :感謝@ComplicatedSeeBio的評論,我沒有發現結果差強人意。 他的答案提到了為什么差異要減少20%。 但是,即使沒有“編程錯誤”,由於浮點問題,您仍將無法獲得預期的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.