我爲我的課程寫的程序需要一個從0.5到42.9的行以及其他幾行的行。由於雙打不準確的程序計數0.1,直到0.7,然後下一個數字變爲0.799999999而不是8.我有點在代碼糾正這一點。我想說這與Math.abs和EPS有關,但我不確定。任何意見,將不勝感激。在java中用雙打計數
{
System.out.println(" ");
final double MAX2 = 43;
for (double row = 0.5; row<MAX2; row+=0.1)
{
System.out.print(row);
if(row != MAX2 -1)
{System.out.print(",");
}//SOP COMMA
}//SOP ROW3
}//.5,42.9
最終的結果是
0.5,0.6,0.7,0.7999999999999999,0.8999999999999999,0.9999999999999999,1.0999999999999999,1.2,1.3,1.4000000000000001,1.5000000000000002,1.6000000000000003,1.7000000000000004,1.8000000000000005,1.9000000000000006,2.0000000000000004,2.1000000000000005,2.2000000000000006 ,2.3000000000000007,2.400000000000001,2.500000000000001,2.600000000000001,2.700000000000001,2.800000000000001,2.9000000000000012等
我不明白:你的問題是什麼? – Kon
[每個計算機科學家應該知道的關於浮點運算的知識](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)。您可以使用'BigDecimal'而不是float/double來避免這種行爲。 – Pshemo
如何讓行以.1至42.9的增量計數 – user2805461