Функция JS для форматирования денег работает плохо после 999,99 (2 десятичных знака) - PullRequest
0 голосов
/ 26 октября 2019
var tmp = parseInt($('.'+auctionId2+' .bidCount').html());
$('.'+auctionId2+' .bidCount').html(tmp+1);

var tmp1 = $('.'+auctionId2+' .productValue').html();
tmp1 = tmp1.replace(',', '@');
tmp1 = tmp1.replace('.', ',');
tmp1 = tmp1.replace('@', '.');
tmp1 = parseFloat(tmp1);
tmp1 = tmp1 - bid_price;
var tmp2 = formatMoney(tmp1);
$('.'+auctionId2+' .auctionSavings').html(tmp2 + "€");

function formatMoney(amount, decimalCount = 2, decimal = ",", thousands = ".") {
try {
decimalCount = Math.abs(decimalCount);
decimalCount = isNaN(decimalCount) ? 2 : decimalCount;

const negativeSign = amount < 0 ? "-" : "";

let i = parseInt(amount = Math.abs(Number(amount) || 0).toFixed(decimalCount)).toString();
let j = (i.length > 3) ? i.length % 3 : 0;

return negativeSign + (j ? i.substr(0, j) + thousands : '') + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousands) + (decimalCount ? decimal + Math.abs(amount - i).toFixed(decimalCount).slice(2) : "");
} catch (e) {
console.log(e)
}
};

Эти функции обновляют в режиме реального времени цену, она работает до 999,99 после 1.000,00 и всегда показывает отрицательный бессмысленный номер.

В интерфейсе отображается вэти строки

 <h2 class="auctionSavings"><?php echo $number->currency($auction['Auction']['savings']['price'], $appConfigurations['currency']);?></h2>

И JS обновляют цену в режиме реального времени, работая хорошо, когда цены ниже 999,99, и плохо, если цены выше 1.000,99

Цены всегдаимеет 2 десятичных знака, десятичные разделены на "," и тысячи и сотни на "."

Где проблема в функции?

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...