Если дробная часть числа равна 0.5 или больше, то аргумент округляется к следующему большему целому. Если дробная часть меньше, чем 0.5, то округление производится до ближайшего меньшего целого.
// возвратит 20
x=Math.round(20.49)
// возвратит 21
x=Math.round(20.5)
// возвратит -20
x=Math.round(-20.5)
// возвратит -21
x=Math.round(-20.51)
Очень жаль, что нет функции, которая округляет до нужного знака. В статье неплохо бы ее написать.
Округление до нужной точности после запятой
Для этого используется метод toFixed.
0.1234.toFixed(2) = 0.12
.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 ! похоже "правильность" js еще и от браузера зависит
>не всегда работает правильно...
parseFloat(71.175).toFixed(2)=71.17
правильно, это называется "банковское округление", где при округлении 5 учитывается предшествующий знак, нечетные в меньшую, четные в большую сторону.
поэтому
parseFloat(71.185).toFixed(2) будет 71.19
это округление используется в .NET
Но это только для toFixed(2). Для toFixed(1) или toFixed(3) этот феномен не наблюдается
Не могу найти функцию, которая возвращает дробную часть числа
123.456 % 1
и взять цифр сколько там надо
можно еще так:
123.456.toString().split(/\./)[1];
Стоит еще раз поставить ударение: toFixed возвращает строковое представление числа, а поскольку и сравнение и сложение для строковых переменных в JS возможно (последнее становится конкатенацией) то желательно применять что то вроде
Или более жестко:
Собственно функция round с нужной точностью, для страждущих:
Вот ещё один вариант, но за точность не ручаюсь:
> Собственно функция round с нужной точностью, для страждущих:
Ловите бугурт.
предыдущая версия немного неверная. смотрите гист https://gist.github.com/andrew-aladev/3ffaaf689745bc49d2b1
Все равно это не решает проблемы:
10000.345.round(1) = 10000.3