我想要Intl.NumberFormat()
根据通用规则自动在较小单位和较大单位之间进行转换。 IE。给定的数字应根据数字的大小在输出中转换为厘米、米和公里之间的值。
代码示例:
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);
这两个调用的输出是:
1,000,000B/秒
365天
在这种情况下,我希望这样:
1MB/s
1 year
人们可能想要定义何时转换为下一个更大单位的阈值。因此,一旦达到确切的值,转换就应该发生,但也应该更早,比如下一个更大单位的 90%。鉴于上面的示例,输出将是这样的:
0.9MB/s
0.9年
API 是否有配置选项可以做到这一点?
不完全是问题的完整答案,但我想我把它放在这里以防它可以帮助任何人。
接近这个的东西实际上是可能的国际数字格式,但它有一些局限性。例如,如果您想格式化字节值,您可以:
- Use the
compact
符号。
- Use
unit
作为您的风格,并提供byte
为单位。
- Set
narrow
as unitDisplay
.
使用这些选项,格式化程序将正确地从一种单位转换为另一种单位,并且由于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));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)