Как удалить конечные нули из числа js?
Есть небольшой калькулятор, стоимость выводится с нулями. Хотелось бы выводить целое число, без запятых, но каждый раз, когда я это делаю, калькулятор ломается. Скорее всего в этом моя вина кривой записи.
Фул
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))
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для удаления конечных нулей из числа в 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
В этом примере функция removeTrailingZeros() принимает число и использует метод toFixed(), чтобы округлить число до 10 десятичных знаков. Затем с помощью регулярного выражения заменяются конечные нули на пустую строку. Наконец, результат преобразуется обратно в число с помощью унарного плюса.
Таким образом, после выполнения этой функции конечные нули будут удалены из числа.
Надеюсь, это поможет вам решить вашу проблему! Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать.