Функция не работает, выдаёт roundPlus(2162.615, 2) = 2162.61 , а надо 2162.62.
Подскажите, в чем же ошибка ? |
правильное округление
kv9923,
если хочется правильное округление ... источник https://gist.github.com/andrew-alade...689745bc49d2b1 <!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> </head> <body> <script> String.prototype.lpad = function (padding, length) { var string = this; while (string.length < length) { string = padding + string; } return string; } Number.prototype.round = function(base) { if (base == null || base < 0) { return this; } var string = this.toString(); var point_index = string.indexOf("."); if (point_index == -1) { return this; } var symbol_index = point_index + 1 + base; if (symbol_index >= string.length) { return this; } var integer = parseInt(string.substring(0, point_index), 10); var fractional = parseInt(string.substring(point_index + 1, point_index + 1 + base), 10) || 0; var max_fractional = Math.pow(10, base); var symbol = parseInt(string.charAt(symbol_index), 10); if (symbol >= 5) { if (base == 0) { integer ++; } else { if (fractional + 1 == max_fractional) { integer ++; fractional = 0; } else { fractional ++; } } } return new Number(parseFloat(integer + "." + (fractional.toString().lpad("0", base)))); } var a = 2162.615; alert(a.round(2)); </script> </body> </html> |
Судя по всему это для рассчета денег.
Тогда до двух знаков можно так округлять, сместим точку, округлим в меньшую сторону и вернем точку назад : Math.floor(n *100) /100 |
aklis,
:-? где 2162.62? var n = 2162.615; alert(Math.floor(n *100) /100); |
Пардон, присмотрелся и понял что ошибался, не для денег видимо, потому что в большую нужно. Тогда так:
function f(num, zeros) { var factor = +("1e" + zeros); return Math.ceil(num *factor) /factor; }; |
Надо отдохнуть, а то мозги заклинило и не могу понять, для денег таки в большую или меньшую надо?=) Щас еще подумал и уже выходит что в большую. Где-то недоплатишь потом и здравствуй пеня.
|
Цитата:
|
рони
Да, хорошая округлялка, спасибо, уже утащил в кладовку:) |
До меня только сейчас дошло что Math.round вообщето сработает как надо в моей функции:)
function f(num, zeros) { var factor = +("1e" + zeros); return Math.round(num *factor) /factor; }; f(123.124252,2) //123.12 f(123.125252,2) //123.13 |
:cray:
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 02:41. |