js decimal precision toFixed()没有返回正确的值

时间:2018-04-03 12:01:51

标签: javascript jquery

我正在尝试使用精度2舍入值。

以下是代码段

var value = 250.445; var result =(value).toFixed(2);

结果包含250.44,在roundOff之后应该存储250.45,

我也试过直接输入chrome的控制台。但它仍显示250.44的值。

提前致谢。

5 个答案:

答案 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

试一试!

take a look

答案 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()并不总是正确地舍入。 这已经过了herehere

主要问题是,二进制的十进制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,则所有看到的用户定义的替换功能都无法正常工作。