Округлить до 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
}
Другие вопросы по тегам