2012-04-19 53 views
6

我有这样的:删除小数点后两位数字不是javascript中的整数?

i=4.568; 
document.write(i.toFixed(2)); 

输出:

4.57 

但我不想转过最后一个号码7,我能做些什么?

+0

当你用二进制浮点工作,这样的事情可能发生。 – Pointy 2012-04-19 13:56:15

+0

@Pointy:No;他只是不想四舍五入。 – SLaks 2012-04-19 13:58:48

+0

是的,但我的观点是,通常在处理浮点时,你不能保证你输入的常量最终会达到你想象的结果,舍入或舍入,主要是因为2和5是相对的总数: - ) – Pointy 2012-04-19 14:00:37

回答

9

改为使用简单的数学;

document.write(Math.floor(i * 100)/100); 

(jsFiddle)

您可以在自己的函数重用坚持下去;

function myToFixed(i, digits) { 
    var pow = Math.pow(10, digits); 

    return Math.floor(i * pow)/pow; 
} 

document.write(myToFixed(i, 2)); 

(jsFiddle)

+0

该函数什么也没有返回..! – 2012-04-19 14:26:25

+0

应该是:document.write(Math.floor(i * 100)/ 100); – 2012-04-19 14:30:45

0

稍微令人费解的做法:

var i=4.568, 
    iToString = ​i + ''; 
    i = parseFloat(iToString.match(/\d+\.\d{2}/)); 
console.log(i); 

这有效地采取了可变i,并将其转换为字符串,然后使用正则表达式小数点前的数字匹配和小数点后面的两个数字,然后使用parseFloat()将其转换回数字。

参考文献:

5

就削减较长的字符串:

i.toFixed(3).replace(/\.(\d\d)\d?$/, '.$1') 
+0

感谢帖子SLaks – ranjenanil 2012-08-09 06:04:46

+0

toFixed是一个较短的解决方案,它的工作。 – Mayhem 2016-12-21 00:37:00

相关问题