Как работает функция .toFixed() в javaScript?

По работе надо разобраться с javaScript. Есть функция .toFixed(2), которая округляет число до 2-х знаков после запятой. Вопрос состоит в том - каким способом она это делает, когда у нас 3 знак после запятой - 5-ка? (например 0.915, 1.235 и т.д.)

1) Сначала подумал, что простым округлением в большую сторону. Т.е.:
0.915 -> должно было перейти в 0.92
Проверяем:
- 0.905.toFixed(2) = 0.91 - ок
- 0.915.toFixed(2) = 0.92 - ок
- 0.925.toFixed(2) = 0.93 - ок
.....
- 0.955.toFixed(2) = 0.96 - false! JavaScript говорит = 0.95!
- 0.965.toFixed(2) = 0.97 - false! JavaScript говорит = 0.96!
Так. Округление в большую сторону не подходит.

2) Видимо функция работает следующим образом: от 0.905 до 0.945 мы увеличиваем в большую сторону, а с 0.955 до 0.995 просто отбрасывается 5-ка.
Проверяем:
- 0.905.toFixed(2) = 0.91 - ок
- 0.915.toFixed(2) = 0.92 - ок
- 0.925.toFixed(2) = 0.93 - ок
....
- 0.955.toFixed(2) = 0.95 - ок
- 0.995.toFixed(2) = 0.99 - ок

И все было хорошо, до тех пор, пока я не проверил на такое значение:
- 0.755.toFixed(2) = 0.75 - false! JavaScript говорит = 0.76!
- 0.765.toFixed(2) = 0.76 - false! JavaScript говорит = 0.77!

Думал может дело в не четности 7-ки? Поэтому такой результат. Но здесь я сломался окончательно:
- 1.755.toFixed(2) = 1.76 - false! (По предыдущему примеру) НО! JavaScript говорит = 1.75!

Отсюда вопрос - какой алгоритм работы метода .toFixed()?
  • Вопрос задан
  • 5710 просмотров
Пригласить эксперта
Ответы на вопрос 3
@Aves
Округляет он по обычным правилам, но неточно из-за операций над числами с плавающей запятой в бинарном формате - blog.chewxy.com/2014/02/24/what-every-javascript-d...
Округлять точно так: Math.round(0.955*100)/100
Ответ написан
Stalker_RED
@Stalker_RED
>> Как работает
Хреново он работает. Хотие точность - используйте Math.Round()

Демка: jsfiddle.net/Stalk/5spu017s/1
Ответ написан
dasha_programmist
@dasha_programmist
ex Software Engineer at Reddit TS/React/GraphQL/Go
Она ничего не округляет! округляет math.round()
читай документацию https://developer.mozilla.org/en-US/docs/Web/JavaS...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы