2015-08-14 34 views
0

我正面臨一個問題,如果有人向我解釋我的功能出了什麼問題,我會很喜歡。正好有兩位小數的格式編號問題

見下面的代碼:

如果用完=>數(10000.88,2)

任何人都可以解釋我爲什麼代替10000.88

其中如果我運行數輸出10000.87(11111.88 ,2)輸出正確11111.88 所有其他輸出都是正確的。

function number(value, decPos) { 
 
     
 
    return Math.floor(Math.abs(value) * Math.pow(10, decPos))/Math.pow(10, decPos); 
 
     
 
} 
 

 
document.write("<div>" + number(10, 2) + '</div>'); 
 
document.write("<div>" + number(10.8888, 2) + '</div>'); 
 
document.write("<div>" + number(100.8888, 2) + '</div>'); 
 
document.write("<div>" + number(1000.88, 2) + '</div>'); 
 
document.write("<div>" + number(10000.888, 2) + '</div>'); 
 
// magic 
 
document.write("<div>" + number(10000.88, 2) + '</div>'); 
 

 
document.write("<div>" + number(100000.8888, 2) + '</div>'); 
 

 
// magic 
 
document.write("<div>" + number(8368.88, 2) + '</div>'); 
 

 
document.write("<div>" + number(11111.8888, 2) + '</div>'); 
 
document.write("<div>" + number(11111.88, 2) + '</div>');
<div id="result"></div>

+1

你有沒有意識到有toFixed()? – epascarello

+1

可能重複[浮點數學是否被破壞?](http://stackoverflow.com/questions/588004/is-floating-point-math-broken) – HPierce

+1

舍入錯誤... – brso05

回答

1

這是一個舍入誤差,精度無法使用雙打或浮筒保證。

1

這不是多麼圓潤的作品,你會得到不準確的數字。

但是如果你必須:

function subdec(value, decimals) 
{ 
    decimals = decimals || 2; 
    var parts = value.toString().split('.'); 

    if (parts[1]) { 
     parts[1] = parts[1].substr(0, decimals); 
     return parseFloat(parts.join('.')); 
    } 

    return value; 
} 

添加到這個函數的調用您number()功能。

0

您可以使用此函數生成預期結果。

function number(value, decPos) { 
    str = String(value).split("."); 
    if (str[1]) { 
     return str[0]+"."+str[1].substring(0, decPos); 
    } 
    return str[0]; 
} 
0

我調整了一下你的代碼,以便利用.toFixed()函數。我做到了這樣decPos也決定了多少小數位.toFixed()將切斷。這是你正在尋找的功能嗎?

function number(value, decPos) { 
 
     
 
    return Math.floor((Math.abs(value) * Math.pow(10, decPos)).toFixed(decPos))/Math.pow(10, decPos); 
 
     
 
} 
 

 
document.write("<div>" + number(10, 2) + '</div>'); 
 
document.write("<div>" + number(10.8888, 2) + '</div>'); 
 
document.write("<div>" + number(100.8888, 2) + '</div>'); 
 
document.write("<div>" + number(1000.88, 2) + '</div>'); 
 
document.write("<div>" + number(10000.888, 2) + '</div>'); 
 
// magic 
 
document.write("<div>" + number(10000.88, 2) + '</div>'); 
 

 
document.write("<div>" + number(100000.8888, 2) + '</div>'); 
 

 
// magic 
 
document.write("<div>" + number(8368.88, 2) + '</div>'); 
 

 
document.write("<div>" + number(11111.8888, 2) + '</div>'); 
 
document.write("<div>" + number(11111.88, 2) + '</div>'); 
 
document.write("<div>" + number(10000.888, 3) + '</div>'); 
 
// magic 
 
document.write("<div>" + number(10000.88, 3) + '</div>');
<div id="result"></div>

相關問題