2013-10-14 62 views
2

我從的toString()內置函數的JavaScript的toString()奇怪的行爲

這裏一個非常奇怪的輸出結果是我的代碼:

function strangeFunction(num) 
{ 
return num.toString(); 
} 


alert(strangeFunction(121.112*100)); //output: 12111.199999999999 
alert(strangeFunction(.1*100)); //output: 10 
alert(strangeFunction(1.33*100)); //output: 133 
alert(strangeFunction(133.33*100)); //output: 13333.000000000002 
alert(strangeFunction(133.33*100));//output: 13334 

http://jsfiddle.net/sVMf4/

任何建議如何解決問題?它似乎是某種錯誤或數字格式問題。

回答

1

這不是JavaScript的只是,幾乎所有的語言操縱floating point值有這個問題。

要避免它,您可以使用Math.round().toFixed()

Math.round(123.456); 
// returns 123 

123.4.toFixed(2); 
// returns "123.40" 

還有.toPrecision(),但它可能會決定使用科學記數法(如1.2e+2),這往往是不想要的。

0

你可以試試這個:

function numToStr(var number, var dec) { 
    return number.toFixed(dec); 
} 

var number = 121.112*100; 

alert(numToStr(number , 0)); 

輸出:

12111 

toFixed(),您可以將數字轉換成字符串,保持小數指定數量。

0

這是因爲浮點數字在內部保存的方式。 如果你確定你想要的精度,你可以試試這個。

function strangeFunction(num) 
{ 
    return parseFloat(num.toPrecision(12)).toString(); 
}