Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Округление до нужного количества знаков после запятой (https://javascript.ru/forum/misc/2860-okruglenie-do-nuzhnogo-kolichestva-znakov-posle-zapyatojj.html)

aklis 10.05.2016 20:38

Дык работает же? Что не так там?

рони 10.05.2016 20:52

Цитата:

Сообщение от aklis
Дык работает же? Что не так там?

пост 14 возьмите число оттуда и получите нужный результат.

aklis 10.05.2016 20:59

А, ну да, это число в двоичном представлении бесконечная дробь жеж. Спасибо.

kv9923 18.05.2016 21:12

да, округление из поста 12 точно работает. Спасибо автору.
Попутно, подскажите, как правильно перемножить числа для дальнейшего округления:
90*24.85*0.97=2169.405 // выдает калькулятор, excel и тд
90*24.85*0.97=2169.4049999999997 // выдает javascript и округлялка соответственно неверно работает. Вместо 2169.41, выдает 2169.40.

рони 19.05.2016 00:10

округление чисел
 
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));

kv9923 21.05.2016 16:46

уже лучше, но 1*24.85*0.97=24.10 , а скрипт считает как 24.11.

рони 21.05.2016 17:11

kv9923,
неа 21.1045 что как раз и даст при округлении до второго знака 24.11 -- вы уж определитесь как вы хотите округлять и напишите функцию с нужными вам параметрами.

kv9923 21.05.2016 18:35

помогите сделать "Округление к ближайшему целому" — наиболее часто используемое округление, как это описано в вики по слову "Округление". Есть конечно и другие методы, но требуется реализовать именно этот. Думаю многие пользователи будут благодарны.
Округление 21.1045 (и 21.104999) до сотых даст 21.10.
Округление 21.1050 (и 21.114999) до сотых даст 21.11.

рони 21.05.2016 18:58

kv9923,
для такого округления достаточно toFixed
alert([21.1050.toFixed(2),21.1045.toFixed(2)] );

ms-pro 01.03.2020 03:35

Цитата:

Сообщение от Shurik_ (Сообщение 12858)
Привет всем! В отличии от PHP (функция round()), в яваскрипте нет функции округляющей до нужного знака после запятой. Есть только метод round, который округляет до целого числа.

Предлагаю Вам простую функцию, которая округляет до нужного знака.

Отлично работает, спасибо Shurik !!!)


Часовой пояс GMT +3, время: 21:56.