Дык работает же? Что не так там?
|
Цитата:
|
А, ну да, это число в двоичном представлении бесконечная дробь жеж. Спасибо.
|
да, округление из поста 12 точно работает. Спасибо автору.
Попутно, подскажите, как правильно перемножить числа для дальнейшего округления: 90*24.85*0.97=2169.405 // выдает калькулятор, excel и тд 90*24.85*0.97=2169.4049999999997 // выдает javascript и округлялка соответственно неверно работает. Вместо 2169.41, выдает 2169.40. |
округление чисел
kv9923,
а так? 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 max_fractional = Math.pow(10, base); var up = 0; string = string.split(""); for (var i = string.length - 1; i >= symbol_index; i--) { if (point_index == i) continue; up = (string[i] = +string[i] + up) >= 5 ? 1 : 0; string[i] %= 10 } string.length = symbol_index; return +(+string.join("") + up / max_fractional).toFixed(base) }; var a = 90*24.85*0.97 ; alert(a.round(2)); |
уже лучше, но 1*24.85*0.97=24.10 , а скрипт считает как 24.11.
|
kv9923,
неа 21.1045 что как раз и даст при округлении до второго знака 24.11 -- вы уж определитесь как вы хотите округлять и напишите функцию с нужными вам параметрами. |
помогите сделать "Округление к ближайшему целому" — наиболее часто используемое округление, как это описано в вики по слову "Округление". Есть конечно и другие методы, но требуется реализовать именно этот. Думаю многие пользователи будут благодарны.
Округление 21.1045 (и 21.104999) до сотых даст 21.10. Округление 21.1050 (и 21.114999) до сотых даст 21.11. |
kv9923,
для такого округления достаточно toFixed alert([21.1050.toFixed(2),21.1045.toFixed(2)] ); |
Цитата:
|
Часовой пояс GMT +3, время: 13:34. |