Как удалить конечные нули из числа js?

Ссылка скопирована
30 января 2026 1 ответ

Есть небольшой калькулятор, стоимость выводится с нулями. Хотелось бы выводить целое число, без запятых, но каждый раз, когда я это делаю, калькулятор ломается. Скорее всего в этом моя вина кривой записи.
Фул

function normalMatches() {         formUpdate();          if (duo_regular === true) {             $(".solo-options, .solo-text").addClass("d-none");             $(".solo-options, .solo-text").removeClass("d-flex");             $(".duo-options, .duo-text").addClass("d-flex");             $(".duo-options, .duo-text").removeClass("d-none");             $(".solo-options :input").prop("checked", false);             streaming = false;         } else {             $(".duo-options, .duo-text").addClass("d-none");             $(".duo-options, .duo-text").removeClass("d-flex");             $(".solo-options, .solo-text").addClass("d-flex");             $(".solo-options, .solo-text").removeClass("d-none");             $(".duo-options :input").prop("checked", false);             duo_premium = false;         }         //price                  if (getRegion(server) == 'EU'){             pricepergame = 70;         }else{             pricepergame = 70;         }         price = pricepergame * games_amount;         completion_time = 1 * games_amount;         if (getRegion(server) == 'OTHER') {             price += price * 0.0;         }         if (duo_regular === true) {             price += price * 0.4;         }         subtotal_price = price.toFixed(2);         extra_price = 0;         if (priority_boost === true) {             extra_price += price * 0.2;         }         if (streaming === true) {             extra_price += price * 0.15;         }         if (prime_time === true) {             extra_price += price * 0.0;         }         if (duo_premium === true) {             extra_price += price * 0.3;         }          extra_price = extra_price.toFixed(2);         price = price + parseFloat(extra_price);         price = price - (price * discount)         price = price.toFixed(2);         updateSummary();     }

function normalMatches() { formUpdate(); if (duo_regular === true) { $(".solo-options, .solo-text").addClass("d-none"); $(".solo-options, .solo-text").removeClass("d-flex"); $(".duo-options, .duo-text").addClass("d-flex"); $(".duo-options, .duo-text").removeClass("d-none"); $(".solo-options :input").prop("checked", false); streaming = false; } else { $(".duo-options, .duo-text").addClass("d-none"); $(".duo-options, .duo-text").removeClass("d-flex"); $(".solo-options, .solo-text").addClass("d-flex"); $(".solo-options, .solo-text").removeClass("d-none"); $(".duo-options :input").prop("checked", false); duo_premium = false; } //price if (getRegion(server) == 'EU'){ pricepergame = 70; }else{ pricepergame = 70; } price = pricepergame * games_amount; completion_time = 1 * games_amount; if (getRegion(server) == 'OTHER') { price += price * 0.0; } if (duo_regular === true) { price += price * 0.4; } subtotal_price = price.toFixed(2); extra_price = 0; if (priority_boost === true) { extra_price += price * 0.2; } if (streaming === true) { extra_price += price * 0.15; } if (prime_time === true) { extra_price += price * 0.0; } if (duo_premium === true) { extra_price += price * 0.3; } extra_price = extra_price.toFixed(2); price = price + parseFloat(extra_price); price = price - (price * discount) price = price.toFixed(2); updateSummary(); }

В этом месте пытался внести правку

...         price = price.toFixed(2); ...

... price = price.toFixed(2); ...

Предлагаемых решений много, но в моем случае не одно не сработало.

Пример моей записи:

price = r=(+n)price.toFixed(2).replace(/([0-9]+(.[0-9]+[1-9])?)(.?0+$)/,'$1');

price = r=(+n)price.toFixed(2).replace(/([0-9]+(.[0-9]+[1-9])?)(.?0+$)/,'$1');

Дополнительно:

Пример моей записи:

это откуда пример? Не вижу в коде выше или вызова функции выше.

Что мешает включить дебаггер, или покрыть функцию console.log'ами и посмотреть в каком месте значение становится некорректным?

Ответы:

toFixed превращает число в строку. Возможно поэтому и ломается.
Не трогайте число. Но выводите строку.

В вашем коде нет вывода, но в качестве примера

// Идут расчеты price = ...  // Делается вывод на страницу element.innerHTML = price.toFixed();

// Идут расчеты price = ... // Делается вывод на страницу element.innerHTML = price.toFixed();

Так вы не трогаете число прайс, но форматируете вывод как нужно

PS. toFixed(2) - вернёт строковое представление числа с двумя знаками после запятой.

  • Это должно быть здесь
    //function updateSummary() {     //Marketing UwU     var origprice = parseFloat(price / (1 - discount));     origprice = (origprice / 0.75).toFixed(2);     $('#original-price').text(currencyConversion(origprice));     $('#original-price').attr('data-price',origprice);     $('#total-price').text(currencyConversion(price));     $('#total-price').attr('data-price', price);    // $('#completion-time').text((completion_time <= 0 ? "Invalid" : completion_time <= 24 ? completion_time + " Hours" : Math.ceil(completion_time / 24) + " Days"));     $('input[name="sbtgvh"]').val(formatCrypt(currencyConversion(subtotal_price)));         $('input[name="exjgvh"]').val(formatCrypt(currencyConversion(extra_price)));         $('input[name="toqgvh"]').val(formatCrypt(currencyConversion(price)));         $('input[name="currency"]').val($('#local_currency').val());         formUpdated();         if (current_tier_num >= desired_tier_num) {             if (current_tier_num === desired_tier_num) {                 switch (current_division) {                     case 'i':                         if (desired_division === "i") {                             $('#purchase-boost').html(                                 '<i class="uil uil-exclamation-circle" style="vertical-align: middle;"></i>' +                                 'Выбор услуги невозможен'                             );                             $('#purchase-boost').attr('disabled', 'disabled');                         }                         break;                     case 'ii':                         if (desired_division != "iii") {                             $('#purchase-boost').html(                                 '<i class="uil uil-exclamation-circle" style="vertical-align: middle;"></i>' +                                 'Выбор услуги невозможен'                             );                             $('#purchase-boost').attr('disabled', 'disabled');                         }                         break;                     case 'iii':                         $('#purchase-boost').html(                             '<i class="uil uil-exclamation-circle" style="vertical-align: middle;"></i>' +                             'Выбор услуги невозможен'                         );                         $('#purchase-boost').attr('disabled', 'disabled');                         break;                 }             } else {                 $('#purchase-boost').html(                     '<i class="uil uil-exclamation-circle" style="vertical-align: middle;"></i>' +                     'Выбор услуги невозможен'                 );                 $('#purchase-boost').attr('disabled', 'disabled');             }         }     }

    //function updateSummary() { //Marketing UwU var origprice = parseFloat(price / (1 - discount)); origprice = (origprice / 0.75).toFixed(2); $('#original-price').text(currencyConversion(origprice)); $('#original-price').attr('data-price',origprice); $('#total-price').text(currencyConversion(price)); $('#total-price').attr('data-price', price); // $('#completion-time').text((completion_time <= 0 ? "Invalid" : completion_time <= 24 ? completion_time + " Hours" : Math.ceil(completion_time / 24) + " Days")); $('input[name="sbtgvh"]').val(formatCrypt(currencyConversion(subtotal_price))); $('input[name="exjgvh"]').val(formatCrypt(currencyConversion(extra_price))); $('input[name="toqgvh"]').val(formatCrypt(currencyConversion(price))); $('input[name="currency"]').val($('#local_currency').val()); formUpdated(); if (current_tier_num >= desired_tier_num) { if (current_tier_num === desired_tier_num) { switch (current_division) { case 'i': if (desired_division === "i") { $('#purchase-boost').html( '<i class="uil uil-exclamation-circle" style="vertical-align: middle;"></i>' + 'Выбор услуги невозможен' ); $('#purchase-boost').attr('disabled', 'disabled'); } break; case 'ii': if (desired_division != "iii") { $('#purchase-boost').html( '<i class="uil uil-exclamation-circle" style="vertical-align: middle;"></i>' + 'Выбор услуги невозможен' ); $('#purchase-boost').attr('disabled', 'disabled'); } break; case 'iii': $('#purchase-boost').html( '<i class="uil uil-exclamation-circle" style="vertical-align: middle;"></i>' + 'Выбор услуги невозможен' ); $('#purchase-boost').attr('disabled', 'disabled'); break; } } else { $('#purchase-boost').html( '<i class="uil uil-exclamation-circle" style="vertical-align: middle;"></i>' + 'Выбор услуги невозможен' ); $('#purchase-boost').attr('disabled', 'disabled'); } } }

  • zeaovede, как ошибка проявляется то? Строки складываются? Нули остаются?

    Не могу пройти мимо, немного украшаю код. Там если разные ошибки, то сорри. В идеале эти прайсы закидывать в функцию как аргумент, например normalMatches(price);

    function updateSummary() {   //Marketing UwU   const origprice = parseFloat(price / (1 - discount));   origprice = (origprice / 0.75).toFixed(2);   $("#original-price").text(currencyConversion(origprice));   $("#original-price").attr("data-price", origprice);   $("#total-price").text(currencyConversion(price));   $("#total-price").attr("data-price", price);   // $('#completion-time').text((completion_time <= 0 ? "Invalid" : completion_time <= 24 ? completion_time + " Hours" : Math.ceil(completion_time / 24) + " Days"));   $('input[name="sbtgvh"]').val(formatCrypt(currencyConversion(subtotal_price)));   $('input[name="exjgvh"]').val(formatCrypt(currencyConversion(extra_price)));   $('input[name="toqgvh"]').val(formatCrypt(currencyConversion(price)));   $('input[name="currency"]').val($("#local_currency").val());   formUpdated();    function sendErrorMsg() {     $("#purchase-boost").html('<i class="uil uil-exclamation-circle" style="vertical-align: middle;"></i>' + "Выбор услуги невозможен");     $("#purchase-boost").attr("disabled", "disabled");   }    if (current_tier_num < desired_tier_num) return;   if (current_tier_num !== desired_tier_num) return sendErrorMsg();    switch (current_division) {     case "i":       if (desired_division === "i") sendErrorMsg();       break;     case "ii":       if (desired_division != "iii") sendErrorMsg();       break;     case "iii":       sendErrorMsg();       break;   }   return; }  function normalMatches() {   formUpdate();    if (duo_regular) {     $(".solo-options, .solo-text").addClass("d-none");     $(".solo-options, .solo-text").removeClass("d-flex");     $(".duo-options, .duo-text").addClass("d-flex");     $(".duo-options, .duo-text").removeClass("d-none");     $(".solo-options :input").prop("checked", false);     streaming = false;   } else {     $(".duo-options, .duo-text").addClass("d-none");     $(".duo-options, .duo-text").removeClass("d-flex");     $(".solo-options, .solo-text").addClass("d-flex");     $(".solo-options, .solo-text").removeClass("d-none");     $(".duo-options :input").prop("checked", false);     duo_premium = false;   }   //price    if (getRegion(server) == "EU") {     pricepergame = 70;   } else {     pricepergame = 70;   }   price = pricepergame * games_amount;   completion_time = 1 * games_amount;   if (getRegion(server) == "OTHER") {     price += price * 0.0;   }   if (duo_regular) {     price += price * 0.4;   }   subtotal_price = price.toFixed(2);   extra_price = 0;   if (priority_boost) {     extra_price += price * 0.2;   }   if (streaming) {     extra_price += price * 0.15;   }   if (prime_time) {     extra_price += price * 0.0;   }   if (duo_premium) {     extra_price += price * 0.3;   }    extra_price = extra_price.toFixed(2);   price = price + parseFloat(extra_price);   price = price - price * discount;   price = parseFloat(price.toFixed(2));   updateSummary(); }

    function updateSummary() { //Marketing UwU const origprice = parseFloat(price / (1 - discount)); origprice = (origprice / 0.75).toFixed(2); $("#original-price").text(currencyConversion(origprice)); $("#original-price").attr("data-price", origprice); $("#total-price").text(currencyConversion(price)); $("#total-price").attr("data-price", price); // $('#completion-time').text((completion_time <= 0 ? "Invalid" : completion_time <= 24 ? completion_time + " Hours" : Math.ceil(completion_time / 24) + " Days")); $('input[name="sbtgvh"]').val(formatCrypt(currencyConversion(subtotal_price))); $('input[name="exjgvh"]').val(formatCrypt(currencyConversion(extra_price))); $('input[name="toqgvh"]').val(formatCrypt(currencyConversion(price))); $('input[name="currency"]').val($("#local_currency").val()); formUpdated(); function sendErrorMsg() { $("#purchase-boost").html('<i class="uil uil-exclamation-circle" style="vertical-align: middle;"></i>' + "Выбор услуги невозможен"); $("#purchase-boost").attr("disabled", "disabled"); } if (current_tier_num < desired_tier_num) return; if (current_tier_num !== desired_tier_num) return sendErrorMsg(); switch (current_division) { case "i": if (desired_division === "i") sendErrorMsg(); break; case "ii": if (desired_division != "iii") sendErrorMsg(); break; case "iii": sendErrorMsg(); break; } return; } function normalMatches() { formUpdate(); if (duo_regular) { $(".solo-options, .solo-text").addClass("d-none"); $(".solo-options, .solo-text").removeClass("d-flex"); $(".duo-options, .duo-text").addClass("d-flex"); $(".duo-options, .duo-text").removeClass("d-none"); $(".solo-options :input").prop("checked", false); streaming = false; } else { $(".duo-options, .duo-text").addClass("d-none"); $(".duo-options, .duo-text").removeClass("d-flex"); $(".solo-options, .solo-text").addClass("d-flex"); $(".solo-options, .solo-text").removeClass("d-none"); $(".duo-options :input").prop("checked", false); duo_premium = false; } //price if (getRegion(server) == "EU") { pricepergame = 70; } else { pricepergame = 70; } price = pricepergame * games_amount; completion_time = 1 * games_amount; if (getRegion(server) == "OTHER") { price += price * 0.0; } if (duo_regular) { price += price * 0.4; } subtotal_price = price.toFixed(2); extra_price = 0; if (priority_boost) { extra_price += price * 0.2; } if (streaming) { extra_price += price * 0.15; } if (prime_time) { extra_price += price * 0.0; } if (duo_premium) { extra_price += price * 0.3; } extra_price = extra_price.toFixed(2); price = price + parseFloat(extra_price); price = price - price * discount; price = parseFloat(price.toFixed(2)); updateSummary(); }

  • velflex, либо крашится весь функционал, либо ничего не происходит и нули остаются. Я не шарю за js, правил записи правильных не знаю. Если что-то и делаю, то интуитивно. Так что тут велика доля, что я записываю не правильно, или к моему решению вот так вот на раз два записать нельзя и нужно много где чего переписывать
  • zeaovede, если нужно просто целое число без запятых, подойдёт
    parseInt(price);

    Пример:
    10.15 => 10
    "10,15" => 10

  • Если нужно целое число без дробной части, то для этого есть
    Math.trunc()
  • Number(price.toFixed(2))
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Кирилл JS Ответ

Для удаления конечных нулей из числа в JavaScript, можно воспользоваться несколькими способами. Один из них - использование метода toFixed(), который преобразует число в строку, округляет его до указанного количества десятичных знаков и затем удаляет конечные нули.

Вот пример кода на JavaScript, который позволяет удалить конечные нули из числа:

function removeTrailingZeros(num) {
  return +num.toFixed(10).replace(/\.?0+$/, '');
}
 
let number = 10.5000;
let result = removeTrailingZeros(number);
console.log(result); // Output: 10.5

function removeTrailingZeros(num) { return +num.toFixed(10).replace(/\.?0+$/, ''); } let number = 10.5000; let result = removeTrailingZeros(number); console.log(result); // Output: 10.5

В этом примере функция removeTrailingZeros() принимает число и использует метод toFixed(), чтобы округлить число до 10 десятичных знаков. Затем с помощью регулярного выражения заменяются конечные нули на пустую строку. Наконец, результат преобразуется обратно в число с помощью унарного плюса.

Таким образом, после выполнения этой функции конечные нули будут удалены из числа.

Надеюсь, это поможет вам решить вашу проблему! Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно