我正在尝试使用精度2舍入值。
以下是代码段
var value = 250.445; var result =(value).toFixed(2);
结果包含250.44,在roundOff之后应该存储250.45,
我也试过直接输入chrome的控制台。但它仍显示250.44的值。
提前致谢。
答案 0 :(得分:2)
function round(num,dec)
{
num = Math.round(num+'e'+dec)
return Number(num+'e-'+dec)
}
用法:
alert(round(yourNumbber ,decimalsBehindYourNumber));
示例:
alert(round(2.453,1))
表示将2.453转为2.5
试一试!
答案 1 :(得分:2)
您可以使用:
Math.round(your var or number);
或
Math.floor(your var or number);
$('#teste').html(Math.round(245.655) + " - Round")
$('#testefloor').html(Math.floor(245.655) + " - Floor")
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label id="teste"></label><br>
<label id="testefloor"></label>
答案 2 :(得分:0)
关键是,tofixed()并不总是正确地舍入。 这已经过了here和here。
主要问题是,二进制的十进制250.445可能略小,导致它舍入结果。有几个自编函数可以解决这个问题。 E. g。
function toFixed( num, precision ) {
return (+(Math.round(+(num + 'e' + precision)) + 'e' + -precision)).toFixed(precision);
}
答案 3 :(得分:0)
var值= 250.445; var result =(value).toFixed(2); 结果包含250.44
250.44是绝对正确的结果,因为计算机中不存在250.445的精确表示。如果读数为250.445,则四舍五入为最接近的可能值= 250.444999999999993(64位浮点型)。将这个数字四舍五入到toFixed(2)会得出250.44。
btw,250.444999999999993在内部存储为0x406f4e3d70a3d70a,下一个更高的值是0x406f4e3d70a3d70b == 250.445000000000022。
答案 4 :(得分:0)
toFixed()可以正常工作,但是大多数人不理解浮点数有限表示的问题。
按照第一个链接: 239.575在内部存储为239.574999999999989,四舍五入到2位数字是239.57,而不是239.58。如果您输入239.5749999,则所有看到的用户定义的替换功能都无法正常工作。