округлить десятичную с использованием JavaScript - PullRequest
5 голосов
/ 04 апреля 2011

Мне нужно округлить десятичное значение до десятичных разрядов, используя JavaScript.

Пример ::

16.181 to 16.18
16.184 to 16.18
16.185 to 16.19
16.187 to 16.19

Я нашел несколько ответов, но большинство из них не округляются с 16.185 до 16.19 ..

Ответы [ 8 ]

13 голосов
/ 04 апреля 2011
(Math.round((16.185*Math.pow(10,2)).toFixed(1))/Math.pow(10,2)).toFixed(2);

Если ваше значение равно, например, 16.199, обычный раунд вернет 16.2 ... но с этим методом вы также получите последние 0, так что вы видите 16.20! Но имейте в виду, что значение будет возвращено в виде строки. Если вы хотите использовать его для дальнейших операций, вы должны разобрать его:)

А теперь как функция:

function trueRound(value, digits){
    return (Math.round((value*Math.pow(10,digits)).toFixed(digits-1))/Math.pow(10,digits)).toFixed(digits);
}
2 голосов
/ 15 июля 2011

Спасибо @ayk за ваш ответ, я изменил вашу функцию следующим образом:

function trueRound(value, digits){
    return ((Math.round((value*Math.pow(10,digits)).toFixed(digits-1))/Math.pow(10,digits)).toFixed(digits)) * 1;
}

просто добавьте "* 1 ", потому что с вашим, как вы написали, 16.2 становится 16.20 , и мне не нужен ноль сзади.

1 голос
/ 13 сентября 2012

потребительной

Decimal ds=new Decimal(##.##);
String value=ds.format(inputnumber);

Это будет отлично работать в моем случае, надеюсь, это будет работать на 100%

0 голосов
/ 17 июля 2019

Вы МОЖЕТЕ попробовать более простую функцию ...

function roundOffTo(number, place) {
    return Math.round(number * place) / place;
}

Как это работает? Место может быть 10, 100, 1000, 10000 и так далее. Обратное значение будет 0,1, 0,01, 0,001 и т. Д. Допустим, ваш номер 16.185, а ваше место - 100. Первое, что он сделает, это умножит число на место, которое составляет 1618.5. Округление по Math.round приведет к 1619 году. Разделение по месту дает нам 16.19. Там. Кстати, о проблеме .5 сегодня не нужно беспокоиться, она вроде как исправлена. Но на случай, если это не так, измените Math.round (число * место) на Math.round (число * место + 0,1).

0 голосов
/ 04 апреля 2011
parseFloat(myNum.toFixed(numOfDec))
0 голосов
/ 04 апреля 2011

Код, который вы используете для округления, верен. Но чтобы получить желаемый результат, удалите .toFixed (numOfDec) из кода.

Функция:

функция formatNumber (myNum, numOfDec) {

    var decimal = 1
    for (i = 1; i <= numOfDec; i++)
        decimal = decimal * 10 //The value of decimal determines the number of decimals to be rounded off with (.5) up rule 
    var myFormattedNum = Math.round(myNum * decimal) / decimal
    return (myFormattedNum)
}

Надеюсь, это вам как-то поможет:)

0 голосов
/ 04 апреля 2011
function formatNumber(myNum, numOfDec) {
        var dec = Math.pow(10, numOfDec);
        return Math.round(myNum * dec + 0.1) / dec;
}
0 голосов
/ 04 апреля 2011

[РЕДАКТИРОВАТЬ] Этот код не работает для значения, подобного 18.185, так как 18.185 * Math.pow (10,2) оценивается как 1818.4999999999997

Math.round(<value> * Math.pow(10,<no_of_decimal_places>)) / Math.pow(10,<no_of_decimal_places>) ;

Пример: 1234.5678 -> 2 десятичных знака -> 1234.57

Math.round(1234.5678 * Math.pow(10,2)) / Math.pow(10,2) ; 
...