【问题标题】:Add a thousands separator with decimals添加带小数的千位分隔符
【发布时间】:2021-04-19 01:29:31
【问题描述】:

我需要一个带小数的千位分隔符,每 3 个数字用一个点 (.) 分隔,如果金额有小数,请不要删除逗号 (,)

我有这个方法,一点都不好用。

export function formatAmount(object)
{
    let format = new Intl.NumberFormat('es-VE', { maximumFractionDigits: 10 });
    return format.format(object);
}

如果我传递一个值,则使用此函数

3253,55 -> 3253,55
10000 -> 10.000
25000,55 -> 25.000,55
15000,5421 -> 15.000,5421

如果千位数至少有 5 个数字,基本上它会很好地工作,而 4 它不会与点分开。 我需要结果如下

3253,55 -> 3.253,55
1000 -> 1.000
50000,20 -> 50.000,20
15000,5421 -> 15.000,5421

不知道如何在不影响小数的情况下添加4位分隔符。

我在其他问题中找到了这个可能的解决方案

String(num).replace(/(?<!\..*)(\d)(?=(?:\d{3})+(?:\.|$))/g, '$1.')

但这对我不起作用,因为它将小数点的逗号 (,) 转换为点 (.)

3253,50 -> 3.253.50

如何得到我需要的结果,用点分隔千位而不受到小数点的影响?

【问题讨论】:

  • 使用语言代码“de”代替:(1000).toLocaleString('de', { minimumFractionDigits: 3, maximumFractionDigits: 3}) 给出“1,000.000”。

标签: javascript angular


【解决方案1】:

试试这个

const formatNumber = (number) => {
  const value = number + '';
  const list = value.split('.');
  const prefix = list[0].charAt(0) === '-' ? '-' : '';
  let num = prefix ? list[0].slice(1) : list[0];
  let result = '';
  while (num.length > 3) {
    result = `,${num.slice(-3)}${result}`;
    num = num.slice(0, num.length - 3);
  }
  if (num) {
    result = num + result;
  }
  return `${prefix}${result}${list[1] ? `.${list[1]}` : ''}`;
};

console.log(formatNumber(3253.55));
console.log(formatNumber(50000.20));

【讨论】:

    猜你喜欢
    • 2013-09-02
    • 1970-01-01
    • 2012-10-21
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    相关资源
    最近更新 更多