Intl.NumberFormat无法转换为pt-BR语言环境

5

我有这段代码示例:

const formCurrency = new Intl.NumberFormat('pt-BR', {
    style: 'currency',
    currency: 'BRL',
    minimumFractionDigits: 2
})

如果输入为:

var money = 1000.50

formCurrency.format(money)

期望输出为:R$ 1.000,50,但实际结果为:R$ 1,000.50
请问有人知道如何使用Intl,替换为.或通过其他方式实现此操作吗?
我已经尝试将区域设置更改为de-DE,但仍然不起作用。对于其他的styleR$会发生变化,但标点符号的部分不会变化。

1
Node.js 可能没有完整的 ICU 数据库。我猜想你需要在其他地方找到它 - https://nodejs.org/api/intl.html - Álvaro González
1
感谢@ÁlvaroGonzález提供的文档,我找到了一种方法来实现这个。我会发布我使用的方法来使它工作。 - m4el
6个回答

3

感谢Alvaro,我找到了一种方法。根据MDN和Node文档本身的说明,Node.js仅支持en-US区域设置。因此,为了使它正常工作,我需要:

  • 使用npm i full-icu安装full-icu
  • 在安装后执行npm-rebuild
  • package.json文件中添加以下代码:

    "scripts": { "start":"node --icu-data-dir=node_modules\\full-icu YOURAPP.js" }

  • 使用npm start运行Node应用程序

现在,它会获取正确的区域设置,并做出正确的标点符号。


2

好的,这是一个非常不理想的解决方案,但应该能解决问题。

let result = formCurrency.format(money);
result = result.split('.');
result[0] = result[0].replace(',' , '.');
result = result.join(',');

我尝试使用正则表达式,但找不到一个好的方法。


1
我使用地区设置为“id”(印度尼西亚),对我起作用。
var number = '1555666.99';
console.log(new Intl.NumberFormat('id').format(number))

result: 1.555.666,99

enter image description here


1

生产中需要采取的步骤(类似于@Mael的答案,但稍作修改)

1- 在package.json中添加依赖项(在提交之前本地运行npm i full-icu);

2- 在节点运行应用程序之前添加icu-data-dir路径,然后编辑您的start脚本:

"start": "node --icu-data-dir=./node_modules/full-icu yourEntryFile.js"

这些步骤对我很有帮助,可能对其他人也有用。


-1

使用这个...

function convertMoneyValue(number,element){
    number = parseFloat((number/100)).toFixed(2);
    element.value = (new Intl.NumberFormat('pt-BR', { style: 'currency', currency: 'BRL' }).format(number));
}

-1

我进行了一项测试,结果像下面的示例一样:

const options = { style: 'currency', currency: 'BRL', minimumFractionDigits: 2, maximumFractionDigits: 3 }
const formatNumber = new Intl.NumberFormat('pt-BR', options)
     
let number = 9123456.7115544;
console.log(formatNumber.format(number));
// → R$ 9.123.456,712

我也在一个pt-BR项目上进行了测试,我在vue项目中创建了一个过滤器:

formatValue(val) {  
    const options = {
    style: "currency",
    currency: "BRL",
    minimumFractionDigits: 2,
    maximumFractionDigits: 3
  };
  const formatNumber = new Intl.NumberFormat("pt-BR", options);
  return formatNumber.format(val);
  // val: -70549.82999999999
  // formatNumber.format(val): -R$ 70.549,83
},

好的,我已经编辑了 ;) - Felipe M. Zerede
虽然这个链接可能回答了问题,但最好在这里包含答案的关键部分并提供参考链接。如果链接页面更改,仅有链接的答案可能会失效。-【来自评论】 - theking2
你提出的答案正是我遇到的问题,因为pt-BR包无效。 - m4el
链接参考:https://criarprogramas.com/2021/06/05/formatando-numeros-em-javascript-com-intl-numberformat/ - Felipe M. Zerede
很奇怪,对我来说是可以的 =/ - Felipe M. Zerede
这里有一个 JSFiddle:https://jsfiddle.net/oxymus/vc1720zg/7/ - Felipe M. Zerede

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接