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