Возвращает строковое представление числа без использования экспоненциальной записи, и ровно с fractionDigits цифр после запятой. Число округляется при необходимости, и дробная часть добивается нулями до нужной длины.
Если число больше 1e+21, то метод просто вызывает Number.toString() и возвращает строку в экспоненциальной записи.
Инициирует исключение RangeError, если fractionDigits меньше 0 или больше 20. Хотя некоторые реализации могут поддерживать значения больше 20.
Инициирует исключение TypeError, если объект не является Number.
var n = 12345.6789;
n.toFixed(); // 12346: округление, длина дробной части ноль
n.toFixed(1); // 12345.7: округление
n.toFixed(6); // 12345.678900: добили нулями
(1.23e+20).toFixed(2); // 123000000000000000000.00
(1.23e-10).toFixed(2) // 0.00
При использования метода toFixed необходимо помнить о его не правильной имплементаци в IE6 IE7 IE8.
не верно: 0.6=toFixed()=0
не верно:-0.8=toFixed()=0
верно: 0.6=toFixed()=1
верно: -0.8=toFixed()=-1
Почему не работает?
var i=0.55555555
i.toFixed(3)
alert (i)
Потому, что нужно вот так
var i=0.55555555
i = i.toFixed(3)
alert (i)
Метод toFixed округляет число. Например,
var n = 123456.789;
n.toFixed(); // Вернёт строку "123457", а не "123456"
или
n.toFixed(2); // Вернёт строку "123456.79", а не "123456.78"
В вашем случае, Marwell:
var i = 0.55555555;
i.toFixed(3); // Вернёт строку "0.556", а не "0.555"
Что же вернёт метод toFixed() в следующем примере?
var k = 0.6;
k.toFixed(); /* Если число округлить, то получится 1. Но IE возвращает строку "0", хотя другие браузеры возвращают "1". */
Аналогично и ...
-0.8.toFixed(); /* Число округляем и получаем строку "-1", но только не IE. IE возвратит строку "0", а все остальные "-1" */
В чем отличие
toFixed от
toPrecision
оба возвращают строковое адекватное округление!?
Marwell, читаем внимательно:
toPrecision:
Округляет до общего количества цифр вне зависимости: после запятой или нет.
То есть:
/toPrecision(4)/
-40: -40.00
4: 4.000
400: 400.0
40000: 4.000e+4
toFixed:
Возвращает строковое представление числа без использования экспоненциальной записи, и ровно с fractionDigits цифр после запятой. Число округляется при необходимости, и дробная часть добивается нулями до нужной длины.
То есть:
/toFixed(3)/
-40: -40.000
4: 4.000
400: 400.000
40000: 40000.000
Интересный вопрос, а если числа не до целых округляются, а до 6-го знака? И если не 0,6, а скажем 2,0000006? Сохраняется ли баг IE?
Почему-то FireFox при округлении до 6 знаков округляет 2,0000005 (половину от одной миллионной) до 2,000001 (до одной миллионной), а C#, естественно, (два варианта Math.Round(decimal) - вниз либо к ближайшему "четному"), т.е. всегда до 2.
Почему так? Как округлить число на js правильно?
Фантастический вопрос.
Для начала вам нужно научиться считать до 6 и выучить правила округления.
А потом попытайтесь найти 10 совпадений между зеленым и мокрым, громким и холодным, ну и между FireFox и С#
Я вот такие вещи toFixed(3) - не кроссбраузерные, если и запоминаю, то только для того что бы неиспользывать.
allSumma=Math.round(allSumma*10)/10; // *.3
allSumma=Math.round(allSumma*100)/100; // *.03
allSumma=Math.round(allSumma*1000)/1000;// *.003
В школе математику надо не прогуливать хотя бы в начальных классах
Делить на 10, 100, 1000 опасно. Потом при печати может получиться 123.39999999996 вместо 123.4
toFixed - добивает еще в конце 0. Math.round(allSumma*10)/10; - не добъет 0 в конец.
Отправить комментарий
Приветствуются комментарии:- Полезные.
- Дополняющие прочитанное.
- Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.Для остальных вопросов и обсуждений есть форум.