Возвращает строковое представление числа без использования экспоненциальной записи, и ровно с 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" */
не сторонник IE, но...на наткнулся на такое
.toFixed() в Firefox 21.0, Chrome, Safari и Opera - результатом такой строки
parseFloat(71.175).toFixed(2) будет 71.17 !!!!!!!!!!!!!!!!!!!!
а результатом выражения
Math.round(parseFloat(71.175) * 100) / 100 будет 71.18, т.е. результат правильно округленный
при этом IE на тех же выражениях выдает всегда 71.18 ! получается все браузеры дают не совсем правильные результаты !!! но каждый по-своему...
Попробуйте вывести:
var x = 71.175;
alert(x.toFixed(20));
Вы получите 71.1749999...
Проблема в том, что число 71.175 в двоичной записи не может быть задано конечной двоичной дробью. А значит оно не может быть сохранено точно, и при обратном преобразовании к десятичному числу мы получаем 71.1749999...
Именно с этим искаженным числом и работает метод toFixed. Поэтому получаем 71.17, а не 71.18. Все корректно, просто ошибка округления
Чтобы такого не было используйте Math.round()
В чем отличие
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 в конец.
Я вот такие вещи toFixed(3) - не кроссбраузерные - согласен, в мазиле не работает
но там где работает наблюдаю:
получаю - 990637949789927.25
Автор, забабань комент или статейку как сделать такое:
toFixed( X ), рубит всё до икса,
toPrecision возврощает экспоненциальну запись, которую невозможно читать, без привычки 5 лет в какой-нибудь физ.мат с уклоном в физику и в такие записи... я не могу....
Писать целую функцию для одного float, - кажется ужасным и страшным по нагрузке.
А нужно мне вот что,
что бы все цифры после запятой были видны. Без всяких экспонент без е без степеней.
просто строчку. float ( f ) = 1.234567812312 - вот все их и нужно рисовать.
начался период - можно срубить.
а если 1.234560000 - то рубить под шестёрку. и т.д
я понимаю что ПИ будет непонятно как рисовать. Но эти экспоненты, прямо разрезают глаз.
Как это сделать?
Случайно заметил:
результат: "-0.00" (с минусом)
Почему в Windows98 в IE5 не срабатывает этот код:
var xk1 = parseFloat(xp1.toPrecision(13));
xk1 = parseFloat(xk1.toFixed(13));
var xk2 = parseFloat(xp2.toPrecision(13));
xk2 = parseFloat(xk2.toFixed(13));
var xk3 = parseFloat(xp3.toPrecision(13));
xk3 = parseFloat(xk3.toFixed(13));
А существует ли такая же функция, но только чтобы нули после точки стирались ?
То есть toFixed(2) для 123 оставлял бы 123 (без 2 нулей), а 123.123 менял бы уже на 123.12 как положено.
Можно на единицу умножить то, что получилось после toFixed
var n = 12345.6789;
alert(n);
n.toFixed(1);
alert(n);
Выдает 12345.6789
в чем причина?
попробуйте n=n.toFixed(1) перед вторым алертом
а как округлить до 10?
например число 2543 округлить до 2540?
toFixed(-1) не работает
можно разделить на 10, затем округлить до целого и умножить на 10