gpt4 book ai didi

javascript - Intl.NumberFormat() 中是否有自动转换为更大单位的选项?

转载 作者:行者123 更新时间:2023-12-05 02:42:56 40 4
gpt4 key购买 nike

我希望 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/s
365 days

不过,在那种情况下,我希望这样:

1MB/s
1 year

并且人们可能想要定义何时转换为下一个更大单位的阈值。因此,转换应该在达到确切值后发生,但也可能更早发生,比方说在下一个更大单位的 90% 时发生。鉴于上面的示例,输出将是这样的:

0.9MB/s
0.9 years

API 是否有配置选项来执行此操作?

最佳答案

不完全是问题的完整答案,但我想我把它放在这里以防它可以帮助任何人。

Intl.NumberFormat 实际上可以实现接近于此的结果, 但它有一些局限性。例如,如果你想格式化字节值,你可以:

  1. 使用紧凑符号。
  2. 使用 unit 作为您的样式,并提供 byte 作为单位。
  3. narrow设置为unitDisplay

使用这些选项,格式化程序将正确地从一种单位转换为另一种单位,并且由于 unitDisplay 值,它将显示您所期望的测量单位。

这当然只适用于少数supported units这是有道理的,它限制了你将单位放在值(value)旁边,即使这通常是你想要的。 Browser support如果您需要针对较旧的平台,也可能是个问题。

这是一个示例。

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));

关于javascript - Intl.NumberFormat() 中是否有自动转换为更大单位的选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67202718/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com