Мне нужно округлить десятичное значение до десятичных знаков, используя javascript.
Ex,:
16.181 to 16.18
16.184 to 16.18
16.185 to 16.19
16.187 to 16.19
Я нашел несколько ответов, но большинство из них не округляют с 16.185 до 16.19.
Мне нужно округлить десятичное значение до десятичных знаков, используя javascript.
Ex,:
16.181 to 16.18
16.184 to 16.18
16.185 to 16.19
16.187 to 16.19
Я нашел несколько ответов, но большинство из них не округляют с 16.185 до 16.19.
(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);
}
Спасибо @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 и мне не нужен нуль в спине.
Использование -
Decimal ds=new Decimal(##.##);
String value=ds.format(inputnumber);
Это будет отлично работать в моем случае, надеюсь, что он будет работать на 100%
[EDIT] Этот код не работает для значения 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) ;
function formatNumber(myNum, numOfDec) {
var dec = Math.pow(10, numOfDec);
return Math.round(myNum * dec + 0.1) / dec;
}
Код, который вы используете для округления, верен. Но чтобы получить желаемый результат, удалите из кода .toFixed(numOfDec).
Функция:
function 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)
}
Надеюсь, вам это поможет:)
parseFloat(myNum.toFixed(numOfDec))
Вы могли бы попробовать более простую функцию...
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).