是否有任何 JavaScript 标准 API 可以根据语言环境解析为数字?

Min*_*eet 7 javascript parsing locale numbers

为了根据区域设置格式化数字,有一个标准的 JavaScript API:Intl.NumberFormat

但是对于反向操作,将字符串解析为数字我找不到任何支持语言环境的标准 API:

真的没有 JavaScript 标准 API 可以根据语言环境将字符串解析为数字吗?

如果没有:是否有任何市场已建立的开源库可以这样做?

p.s*_*w.g 8

NPM 包d2l-intl提供了一个区域敏感的解析器。

const { NumberFormat, NumberParse } = require('d2l-intl');
const formatter = new NumberFormat('es');
const parser = new NumberParse('es');
const number = 1234.5;
console.log(formatter.format(number));                 // 1.234,5
console.log(parser.parse(formatter.format(1234.5)));   // 1234.5
Run Code Online (Sandbox Code Playgroud)

不幸的是,该库仅支持少数开箱即用的语言环境。它还使用parseIntwhich 仅支持西方阿拉伯数字,因此对于使用不同数字系统的语言环境,您将不得不变得更加聪明。这是我由Mike Bostock找到的一种解决方案。我不想因此而受到赞扬,但我已经在这里复制了它以供后代使用(根据我自己的喜好进行了一些微调):

const { NumberFormat, NumberParse } = require('d2l-intl');
const formatter = new NumberFormat('es');
const parser = new NumberParse('es');
const number = 1234.5;
console.log(formatter.format(number));                 // 1.234,5
console.log(parser.parse(formatter.format(1234.5)));   // 1234.5
Run Code Online (Sandbox Code Playgroud)

  • 为了正确处理负数,我们需要在“format.formatToParts(-12345.6)”中使用负数,存储减号(可能是与常规“-”不同的字符),然后将其替换为常规减号。工作[此处稍微扩展示例](/sf/answers/5204699741/) (2认同)