toLocaleString 价格不带小数点零

toLocaleString price without decimal zeroes

我想知道如何在保留 2 位小数的情况下有效地从价格中删除小数点零

所以如果价格是 135.00,它应该变成 135

如果价格是 135.30 但是它应该保留两个小数点。

如果一个价格是135.38它可以保留小数点。

这是我目前拥有的:

const currency = 'EUR';
const language = 'NL';

var localePrice = (amount) => {
  const options = {
    style: 'currency',
    currency: currency
  };

  return amount.toLocaleString(language, options);
}

现在我可以使用正则表达式或类似的东西,但我希望有一种更简单的方法来完成这项工作。

我制作了一个 JSFiddle 来说明我的问题,这使得使用代码变得容易。

https://jsfiddle.net/u27a0r2h/2/

您可以添加一个函数来检查数字是否为整数,并在 localePrice 函数中使用一个条件来应用您的格式(使用 slice 来删除小数点):

function isInt(n) {
   return n % 1 === 0;
}

const currency = 'EUR';
const language = 'NL';


var localePrice = (amount) => {
  const options = {
    style: 'currency',
    currency: currency
  };

  if (isInt(amount)){
    return amount.toLocaleString(language, options).slice(0, -3);
  }
  else {
    return amount.toLocaleString(language, options);
  }
}

document.querySelector('.price').innerHTML = localePrice(135.21);

document.querySelector('.price-zeroes').innerHTML = localePrice(135.00);

document.querySelector('.price-with-one-zero').innerHTML = localePrice(135.30);

尝试将 minimumFractionDigits: 0 添加到您的选项中,例如:

const currency = 'EUR';
const language = 'NL';

var localePrice = (amount) => {
  const options = {
    style: 'currency',
    currency: currency,
    minimumFractionDigits: 0
  };

  return amount.toLocaleString(language, options);
}