ИНФОРМАЦИЯ: правильный ответ: https://stackoverflow.com/a/54721202/4359029
Я пытаюсь округлить число с плавающей точкой в Javascript так же, как я делаю это в PHP;но я не могу сделать оба языка одинаковым образом: 6.404999999999999
Когда я использую PHP, я получаю: 6.41
, , но когда я пытаюсь округлить с помощью JavascriptЯ всегда получаю 6.40
Мои попытки 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://stackoverflow.com/a/50918962/4359029
Я пробовал с другими решениями ... но безуспешно.
Может кто-нибудь сказать мнеКак заставить Javascript округляться, чтобы он действовал как PHP?
Не могли бы вы сказать мне, почему они работают по-разному в случае, который я объясняю?