Javascript VS PHP舍入

Pjn*_*020 6 javascript php

我对PHP和javascript轮数的方式有一些问题.我正在使用PHP的圆函数和这个javascript函数:

function roundNumber(number, decimals) {     
    var newnumber = new Number(number+'').toFixed(parseInt(decimals));
    var value = parseFloat(newnumber);
    return value;
}
Run Code Online (Sandbox Code Playgroud)

我试图舍入的数字是43.65*2.5 + 40%,当使用计算器= 152.775或在PHP = 152.78舍入时.

在javascript中我做一个console.log的数字是152.774999999998,当用上面的函数舍入时给我152.77

非常感谢任何帮助重新解决这个问题

And*_*yle 5

这与舍入本身无关,而是与基于二进制的硬件中的十进制数表示方式有关.

查看浮点指南以获取更多相关信息,以及解决方案/替代方案.


mpl*_*jan 4

请查看JavaScript中如何处理浮点数精度?

这是一个例子

function roundNumber(number, decimals) {
  decimals = parseInt(decimals,10);
  var dec = Math.pow(10,decimals)
  console.log(dec,parseFloat(number)*dec);
  number=""+Math.round(parseFloat(number)*dec+.0000000000001); // fixed the .X99999999999
  return parseFloat(number.slice(0,-1*decimals) + "." + number.slice(-1*decimals))     
}


var val = 43.65 * 2.5;
    val+= val*0.40

console.log(val+' ~= 152.78? --> '+roundNumber(val,2).toFixed(2));
console.log('15.803 ~= 15.80? --> '+roundNumber(15.803,2).toFixed(2));
console.log('15.805 ~= 15.81? --> '+roundNumber(15.805,2).toFixed(2));
console.log('14.803 ~= 14.80? --> '+roundNumber(14.803,2).toFixed(2));
console.log('0.575 ~=  0.58? --> '+roundNumber(0.575,2).toFixed(2));
Run Code Online (Sandbox Code Playgroud)