有没有办法通过 JavaScript 中的 Intl.NumberFormat 反转格式

新手上路,请多包涵

Intl.NumberFormat (参见 Mozilla 的文档)在 Javascript 中提供了一种将数字格式化为当前语言环境版本的好方法,如下所示:

 new Intl.NumberFormat().format(3400); // returns "3.400" for German locale

但我找不到扭转这种格式的方法。有没有像

new Intl.NumberFormat().unformat("3.400"); // returns 3400 for German locale

谢谢你的帮助。

原文由 naitsirch 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 523
2 个回答

我找到了解决方法:

 /**
 * Parse a localized number to a float.
 * @param {string} stringNumber - the localized number
 * @param {string} locale - [optional] the locale that the number is represented in. Omit this parameter to use the current locale.
 */
function parseLocaleNumber(stringNumber, locale) {
    var thousandSeparator = Intl.NumberFormat(locale).format(11111).replace(/\p{Number}/gu, '');
    var decimalSeparator = Intl.NumberFormat(locale).format(1.1).replace(/\p{Number}/gu, '');

    return parseFloat(stringNumber
        .replace(new RegExp('\\' + thousandSeparator, 'g'), '')
        .replace(new RegExp('\\' + decimalSeparator), '.')
    );
}

像这样使用它:

 parseLocaleNumber('3.400,5', 'de');
parseLocaleNumber('3.400,5'); // or if you have German locale settings
// results in: 3400.5

不是最好的解决方案,但它有效:-)

如果有人知道实现此目标的更好方法,请随时发布您的答案。

更新

  • 包装在一个完整的可重用函数中
  • 使用正则表达式类 \p{Number} 提取分隔符。因此它也适用于非阿拉伯数字。
  • 使用 5 位数字来支持每四位数字分隔一次的语言。

原文由 naitsirch 发布,翻译遵循 CC BY-SA 4.0 许可协议

在这里,我为 Reverse of format() 函数创建了一个函数。此功能将支持所有语言环境中的反向格式化。

 function reverseFormatNumber(val,locale){
        var group = new Intl.NumberFormat(locale).format(1111).replace(/1/g, '');
        var decimal = new Intl.NumberFormat(locale).format(1.1).replace(/1/g, '');
        var reversedVal = val.replace(new RegExp('\\' + group, 'g'), '');
        reversedVal = reversedVal.replace(new RegExp('\\' + decimal, 'g'), '.');
        return Number.isNaN(reversedVal)?0:reversedVal;
    }

console.log(reverseFormatNumber('1,234.56','en'));
console.log(reverseFormatNumber('1.234,56','de'));

原文由 Saqib Ahmed 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏