Seb*_*ner 11 javascript format internationalization
我想Intl.NumberFormat()根据通用规则自动在单位之间从较小的单位转换为较大的单位。即给定的数字应该根据数字的大小在输出中转换为厘米、米和公里之间的值。
代码示例:
const bytes = 1000000;
const transferSpeed = new Intl.NumberFormat('en-US',
{style: 'unit', unit: 'byte-per-second', unitDisplay: 'narrow'}).format(bytes);
console.log(transferSpeed);
const days = 365;
const timespan = new Intl.NumberFormat('en-US',
{style: 'unit', unit: 'day', unitDisplay: 'long'}).format(days);
console.log(timespan);Run Code Online (Sandbox Code Playgroud)
这两个调用的输出是:
1,000,000B/秒
365 天
在这种情况下,我希望这样:
1MB/秒
1 年
人们可能想要定义何时转换为下一个更大单位的阈值。因此,一旦达到确切的值,转换就应该发生,但也应该更早,比如下一个更大单位的 90%。鉴于上面的示例,输出将是这样的:
0.9MB/秒
0.9 年
API 是否有配置选项可以做到这一点?
and*_*c93 19
不完全是问题的完整答案,但我想我把它放在这里以防它可以帮助任何人。
Intl.NumberFormat实际上可以实现与此接近的效果,但它有一些限制。例如,如果您想格式化字节值,您可以:
compact记号。unit,并byte作为单位提供。narrowunitDisplay使用这些选项,格式化程序将正确地从一种单位转换为另一种单位,并且由于该unitDisplay值,它将按照您的预期显示测量单位。
当然,这仅适用于少数受支持的单位,这对其有意义,并且它限制了您将单位放在值旁边,即使这通常是您想要的。如果您需要针对较旧的平台,浏览器支持也可能是一个问题。
这是一个示例。
const byteValueNumberFormatter = Intl.NumberFormat("en", {
notation: "compact",
style: "unit",
unit: "byte",
unitDisplay: "narrow",
});
console.log(byteValueNumberFormatter.format(10));
console.log(byteValueNumberFormatter.format(200000));
console.log(byteValueNumberFormatter.format(50000000));Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5202 次 |
| 最近记录: |