几行javasript来格式化货币



我正在使用这个函数:

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)
}
};

当我尝试获得一个数字时,直到1,000.01. 带有console.log999.99返回999.00。我需要的格式是111,111.11 (thousands, hundreds, decimals),当我尝试得到一个高于999.99的数字时,我总是得到一个无意义的负数。

有人可以解释一下我的错误在哪里吗?

谢谢。

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 + "€");

如果我做一个控制台.log在 parseFloat 之前它给了我很好的数字,如果我在 parseFloat 之后做并且它是一个高于 999.99 的数字,它会给我一个负数。

您可以将国家/地区代码传递给 toLocaleString 方法以获取货币格式

const money = 10000;
console.log(money.toLocaleString('en-US', {
style: 'currency',
currency: 'USD'
}));

您可以使用java 脚本原型方法,而不是编写自定义代码来格式化此代码。

var n = 999999.99
n.toLocaleString()
"999,999.99"

最新更新