我正在尝试用JavaScript对浮点数进行四舍五入,就像我在PHP中所做的那样; 但是我无法使两种语言以相同的方式舍入以下数字:
6.404999999999999
当我使用PHP round时,我得到:6.41
,但是当我尝试使用JavaScript进行舍入时,我总是得到6.40
INFO: 正确的答案是https://dev59.com/g1QJ5IYBdhLWcg3wnXV-#54721202
我的JavaScript尝试:
尝试#1:
module.exports = function round (value, precision, mode) {
var m, f, isHalf, sgn // helper variables
// making sure precision is integer
precision |= 0
m = Math.pow(10, precision)
value *= m
// sign of the number
sgn = (value > 0) | -(value < 0)
isHalf = value % 1 === 0.5 * sgn
f = Math.floor(value)
if (isHalf) {
switch (mode) {
case 'PHP_ROUND_HALF_DOWN':
// rounds .5 toward zero
value = f + (sgn < 0)
break
case 'PHP_ROUND_HALF_EVEN':
// rouds .5 towards the next even integer
value = f + (f % 2 * sgn)
break
case 'PHP_ROUND_HALF_ODD':
// rounds .5 towards the next odd integer
value = f + !(f % 2)
break
default:
// rounds .5 away from zero
value = f + (sgn > 0)
}
}
return (isHalf ? value : Math.round(value)) / m
}
提取自:http://locutus.io/php/math/round/
尝试 #2:
round(decimal: number, decimalPoints: number): number{
let roundedValue = Math.round(decimal * Math.pow(10, decimalPoints)) / Math.pow(10, decimalPoints);
console.log(`Rounded ${decimal} to ${roundedValue}`);
return roundedValue;
}
来源: https://dev59.com/Smgt5IYBdhLWcg3wwwO-#50918962
我尝试了其他方法,但没有成功。
有人能告诉我如何让JavaScript的四舍五入像PHP一样吗?
你能告诉我为什么它们在我解释的情况下以不同的方式工作吗?
6.405
,但无法在十进制中准确显示它。这是一个很好的阅读材料,问题在于很可能当您将该数字的十进制表示发送到JavaScript时,准确的二进制表示会丢失,JavaScript必须使用嘈杂的数据进行计算。我怀疑除了将操作发送到JavaScript并让它从头开始计算之外,没有其他事情可做。 - apokryfos