На вид непоследовательное поведение toFixed() ⇐ Javascript
-
Гость
На вид непоследовательное поведение toFixed()
Я знаю, что функция toFixed() не предназначена для округления, но я до сих пор не могу понять, почему она иногда округляет вверх, а иногда вниз, когда число заканчивается на .5 Взгляните на эти примеры:
Пример toFixed(0)
(0.5).toFixed(0) > '1' // округляем вверх (1.5).toFixed(0) > '2' // округляем вверх (2.5).toFixed(0) > '3' // округляем вверх (3.5).toFixed(0) > '4' // округляем вверх (4.5).toFixed(0) > '5' // округляем вверх (5.5).toFixed(0) > '6' // округляем вверх (6.5).toFixed(0) > '7' // округляем вверх (7.5).toFixed(0) > '8' // округляем вверх (8.5).toFixed(0) > '9' // округляем вверх (9.5).toFixed(0) > '10' // округляем вверх Постоянное поведение для этого примера.
Пример toFixed(1)
(0.05).toFixed(1) > '0,1' // округляем вверх (1.05).toFixed(1) > '1.1' // округляем вверх (2.05).toFixed(1) > '2.0' // округляем вниз (3.05).toFixed(1) > '3.0' // округляем вниз (4.05).toFixed(1) > '4.0' // округляем вниз (5.05).toFixed(1) > '5.0' // округляем вниз (6.05).toFixed(1) > '6.0' // округляем вниз (7.05).toFixed(1) > '7.0' // округляем вниз (8.05).toFixed(1) > '8.1' // округляем вверх (9.05).toFixed(1) > '9.1' // округляем вверх Здесь все начинает ломаться. Кажется, первая цифра почему-то влияет на округление. Иногда оно округляется в большую сторону, иногда в меньшую.
Пример toFixed(2)
(0.005).toFixed(2) > '0,01' // округляем вверх (1.005).toFixed(2) > '1,00' // округляем вниз (2.005).toFixed(2) > '2,00' // округляем вниз (3.005).toFixed(2) > '3,00' // округляем вниз (4.005).toFixed(2) > '4,00' // округляем вниз (5.005).toFixed(2) > '5,00' // округляем вниз (6.005).toFixed(2) > '6,00' // округляем вниз (7.005).toFixed(2) > '7.00' // округляем вниз (8.005).toFixed(2) > '8.01' // округляем вверх (9.005).toFixed(2) > '9.01' // округляем вверх Еще более странно то, что на округление не всегда влияют одни и те же первые цифры. Вы можете видеть, что результаты здесь похожи на пример toFixed(1), но не совсем такие же.
Это ошибка, какая-то проблема с браузером или ожидаемое поведение?
Моя система:
[*]Apple M1 Pro [*]Версия Chrome 116.0.5845.187
Я знаю, что функция toFixed() не предназначена для округления, но я до сих пор не могу понять, почему она иногда округляет вверх, а иногда вниз, когда число заканчивается на .5 Взгляните на эти примеры:
Пример toFixed(0)
(0.5).toFixed(0) > '1' // округляем вверх (1.5).toFixed(0) > '2' // округляем вверх (2.5).toFixed(0) > '3' // округляем вверх (3.5).toFixed(0) > '4' // округляем вверх (4.5).toFixed(0) > '5' // округляем вверх (5.5).toFixed(0) > '6' // округляем вверх (6.5).toFixed(0) > '7' // округляем вверх (7.5).toFixed(0) > '8' // округляем вверх (8.5).toFixed(0) > '9' // округляем вверх (9.5).toFixed(0) > '10' // округляем вверх Постоянное поведение для этого примера.
Пример toFixed(1)
(0.05).toFixed(1) > '0,1' // округляем вверх (1.05).toFixed(1) > '1.1' // округляем вверх (2.05).toFixed(1) > '2.0' // округляем вниз (3.05).toFixed(1) > '3.0' // округляем вниз (4.05).toFixed(1) > '4.0' // округляем вниз (5.05).toFixed(1) > '5.0' // округляем вниз (6.05).toFixed(1) > '6.0' // округляем вниз (7.05).toFixed(1) > '7.0' // округляем вниз (8.05).toFixed(1) > '8.1' // округляем вверх (9.05).toFixed(1) > '9.1' // округляем вверх Здесь все начинает ломаться. Кажется, первая цифра почему-то влияет на округление. Иногда оно округляется в большую сторону, иногда в меньшую.
Пример toFixed(2)
(0.005).toFixed(2) > '0,01' // округляем вверх (1.005).toFixed(2) > '1,00' // округляем вниз (2.005).toFixed(2) > '2,00' // округляем вниз (3.005).toFixed(2) > '3,00' // округляем вниз (4.005).toFixed(2) > '4,00' // округляем вниз (5.005).toFixed(2) > '5,00' // округляем вниз (6.005).toFixed(2) > '6,00' // округляем вниз (7.005).toFixed(2) > '7.00' // округляем вниз (8.005).toFixed(2) > '8.01' // округляем вверх (9.005).toFixed(2) > '9.01' // округляем вверх Еще более странно то, что на округление не всегда влияют одни и те же первые цифры. Вы можете видеть, что результаты здесь похожи на пример toFixed(1), но не совсем такие же.
Это ошибка, какая-то проблема с браузером или ожидаемое поведение?
Моя система:
[*]Apple M1 Pro [*]Версия Chrome 116.0.5845.187
Мобильная версия