javascript中将数值舍入到小数点后2位

javascript中将数值舍入到小数点后2位,javascript,rounding,Javascript,Rounding,我试图在JavaScript中将数值舍入到最多2位小数。 请尝试访问以下url 如果您注意到代码,我将尝试对以下值进行四舍五入 3.225、4.225和5.225 如果您注意到结果,则3.225四舍五入为3.23,这是正确的。 同样,5.225四舍五入到5.23,这也是正确的,但4.225四舍五入到4.22,而不是4.23 有谁能告诉我如何解决这个问题。试试这个 Number(Math.round(3.225+'e2')+'e-2'); 使用提供的mathjs库。该库提供的round函数比内

我试图在JavaScript中将数值舍入到最多2位小数。 请尝试访问以下url

如果您注意到代码,我将尝试对以下值进行四舍五入 3.225、4.225和5.225

如果您注意到结果,则3.225四舍五入为3.23,这是正确的。 同样,5.225四舍五入到5.23,这也是正确的,但4.225四舍五入到4.22,而不是4.23

有谁能告诉我如何解决这个问题。

试试这个

Number(Math.round(3.225+'e2')+'e-2');

使用提供的mathjs库。该库提供的round函数比内置库更精确。我已经用它测试了你的代码,它可以工作了

在Javascript上这是一项痛苦的任务。根据我的经验,我做过这样的事情:

function round(n, places = 2) {
  var epsilon = Number.EPSILON*1000;
  var exponent = Math.pow(10, places);
  var integral = Math.round((n+epsilon) * exponent);
  return integral/exponent;
}
epsilon
是一个非常小的数字,用于补偿JavaScript中浮动的这种行为

注意:请不要对敏感数据使用此函数,它只是一个非常简单的舍入函数


如果必须处理敏感数据,请按照用户King的建议使用MathJS。

这几乎可以肯定是由于JavaScript中数字的内部二进制表示中存在截断错误。下一个问题是64.225,这将四舍五入到64.22。直到你达到82.225,它才会再次归位。