2011-05-10 47 views

回答

4

很多是結束了.1所以如何mathy選項關於;

var f = 5509.099999999999 

if ((f = f.toString()).indexOf(".") >= 0) 
    f = f.substr(0, 3 + f.indexOf(".")) 

print(parseFloat(f)) 

>>5509.09 
0

您可以截斷數達到一定數量使用這個函數的小數位:

function truncateNumber(number, digits){ 
var divisor = Math.pow(10,digits); 
return Math.floor(number*divisor)/divisor; 
} 

如果你想圓的數量,而不是,您可以使用JavaScript的內置Number.toFixed功能。如果您始終希望號碼的位數長一些,則可以使用Number.toPrecision函數。

+0

不是我的downvote,但是當指定2位小數時,你的解決方案仍然給出'5509.1'。你也有一個錯字(「nuber」) – 2011-05-10 13:35:00

0

您可以使用.toFixed(2)但這會繞過值,因此在您的示例中,您將以5509.10而不是5509.09結束。

下一個最佳選擇是使用Math.floor(),它截斷而非舍入。不幸的是,這隻給出了整數結果,所以爲了得到2位小數的結果,你需要乘以100,然後使用Math.floor(),然後再除以100。

var value = 5509.099999999999; 
var result = Math.floor(value*100)/100; 

[編輯] 嗯,不幸的是,上述不由於問題浮點精度工作 - 即使只是乘以100它的第一步驟給出550910

這意味着最好的答案很可能是將其轉換爲字符串並將字符串切分爲位。

var value = 5509.099999999999; 
var str_value = value.toString(); 
var bits = str_value.split('.'); 
var result = bits[0]+"."+bits[1].substr(0,2); 

通常我不會建議做字符串操作對於這樣的事情,因爲這顯然是一個數學題,但考慮到問題的具體要求,它似乎這是唯一可行的解​​決方案這個案例。

+0

*仍然*給出'5509.1'。 – 2011-05-10 13:30:52

+0

啊,它*應該*。09,但你遇到了浮點數學精度的問題。 :-(簡單地做'value * 100'給出'550110'。你可能會發現唯一的答案是'toString()'和切斷字符串,我會編輯答案.... – Spudley 2011-05-10 13:35:09

+0

我懷疑這是最好的在這種情況下 – 2011-05-10 13:35:50

0

如果您想取小數點後兩位,您可以使用.toPrecision(n) javascript函數,其中n是總數期望的位數。

因此,對於你的榜樣,你所要做的

var x = 5509.099999999999; 
x = x.toPrecision(6); 

這一點,但是,兩輪成績在5509.10

+0

不正確,'toPrecision()'適用於四捨五入。 – 2011-05-10 13:31:37

+0

實際上,這也輪到它,至少在IE8 :( – Tsar 2011-05-10 13:31:42

0
var result = (Math.round((5509.09999 * 100) - 1))/100; 
2

你試過嗎?

var value = 5509.099999999999; 
var str = value.toString(); 
var result = str.substr(0,7); 

然後,如果你需要它是一個浮動再次,你可以這樣做:

var FinalAnswer = parseFloat(result); 

你並不需要所有這些變量,但畢竟是一步一步來。

+0

(5509.099999999999).toString()。substr(0,7)魅力,做得好! – Tsar 2011-05-10 13:41:46

相關問題