Округлить до 2 знаков после запятой (только при необходимости)
Я хотел бы округлить не более 2 десятичных знаков, но только при необходимости.
Входные данные:
10
1.7777777
9.1
Выход:
10
1.78
9.1
Как я могу сделать это в JavaScript
?
97 ответов
Только в случае необходимости вы сказали?
Если вы тоже заботитесь об отрицательных числах, я предлагаю вам это...
Некоторые ответы плохо работают с отрицательными числами...
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>roundPrecision</title>
<script>
class MyMath{
static roundPrecision(number, precision, fillZeros) {
// Number you want to round
// precision nb of decimals
// fillZeros the number of 0 You want to add IF necessary!
// 0 = no fill with zeros.
let num = number;
let prec = precision;
let exp = Math.pow(10, prec);
let round = Math.round(number * exp)/exp
if (fillZeros>0) {
return round.toFixed(fillZeros)
}
return round;
}
}
</script>
</head>
<body>
<p class="myMath" id="field1"></p>
<p class="myMath" id="field2"></p>
<p class="myMath" id="field3"></p>
<p class="myMath" id="field4"></p>
<p class="myMath" id="field5"></p>
<p class="myMath" id="field6"></p>
<p class="myMath" id="field7"></p>
<script>
document.getElementById("field1").innerHTML = MyMath.roundPrecision(5, 0, 3); // 5.000
document.getElementById("field2").innerHTML = MyMath.roundPrecision(Math.PI, 2, 4); // 3.1400
document.getElementById("field3").innerHTML = MyMath.roundPrecision(2.4, 1, 2); // 2.40
document.getElementById("field4").innerHTML = MyMath.roundPrecision(2.9, 0, 2); // 3.00
document.getElementById("field5").innerHTML = MyMath.roundPrecision(10, 0, 2); // 10.00
document.getElementById("field6").innerHTML = MyMath.roundPrecision(-10.5, 1, 2); // 10.00
document.getElementById("field7").innerHTML = MyMath.roundPrecision(-1.006, 2, 0); // 10.00
</script>
</body>
</html>
Как насчет чего-то вроде
num=519.805;
dp=Math.pow(10,2);
num = parseFloat(num.toString().concat("1"));
rounded = Math.round((num + Number.EPSILON)* dp)/dp;
Чтобы округлить. Поскольку это будет иметь дело с числами, которые не хватает, когда в конце нужно округлить только десятичный разряд.
Я попробовал свой собственный код, попробуйте это
function AmountDispalyFormat(value) {
value = value.toFixed(3);
var amount = value.toString().split('.');
var result = 0;
if (amount.length > 1) {
var secondValue = parseInt(amount[1].toString().slice(0, 2));
if (amount[1].toString().length > 2) {
if (parseInt(amount[1].toString().slice(2, 3)) > 4) {
secondValue++;
if (secondValue == 100) {
amount[0] = parseInt(amount[0]) + 1;
secondValue = 0;
}
}
}
if (secondValue.toString().length == 1) {
secondValue = "0" + secondValue;
}
result = parseFloat(amount[0] + "." + secondValue);
} else {
result = parseFloat(amount);
}
return result;
}
Если вы используете lodash в своем проекте, просто выполните
Пожалуйста, используйте функцию ниже, если вы не хотите округлять.
function ConvertToDecimal(num) {
num = num.toString(); // If it's not already a String
num = num.slice(0, (num.indexOf(".")) + 3); // With 3 exposing the hundredths place
alert('M : ' + Number(num)); // If you need it back as a Number
}
Вы можете посчитать длину цифр после десятичной дроби и с помощью простого оператора if установить желаемый тип округления.
let numbers = 5.1356;
const countingDecimals = (numbers) => {
let decimal = numbers.toString().split(".").length;
return decimal;
}
if (countingDecimals(numbers) === 0) {
let localNumbers = numbers;
localNumbers = Math.Floor(localNumbers);
console.log(localNumbers);
} else if (countingDecimals(numbers) === 1) {
let localNumbers = numbers;
localNumbers = Math.round(localNumbers * 10) / 10
console.log(localNumbers);
} else {
let localNumbers = numbers;
localNumbers = Math.round(localNumbers * 100) / 100;
console.log(localNumbers); }
Я до сих пор не думаю, что кто-то дал ему ответ на вопрос, как выполнять округление, только если это необходимо. Самый простой способ сделать это - проверить, есть ли в числе хотя бы десятичное число, например:
var num = 3.21;
if ( (num+"").indexOf('.') >= 0 ) { //at least assert to string first...
// whatever code you decide to use to round
}