运行时
console.log(new Intl.NumberFormat('en-US', {
minimumFractionDigits: 0,
maximumFractionDigits: 0,
maximumSignificantDigits: 3,
minimumSignificantDigits: 1
}).format(10.123456789));
我希望输出为 10
。相反,出于某种原因,它输出 10.1
,这打破了 maximumFractionDigits: 0
约束。这是怎么回事?考虑到这个约束在浏览器中被忽略,这似乎符合规范,但我想不出一个原因。
最佳答案
来自 Intl.NumberFormat parameter descriptions(添加了重点):
The following properties fall into two groups:
minimumIntegerDigits
,minimumFractionDigits
, andmaximumFractionDigits
in one group,minimumSignificantDigits
andmaximumSignificantDigits
in the other. If at least one property from the second group is defined, then the first group is ignored.
必须有一些覆盖行为来处理属性设置冲突,但在您的示例中,人们可能有理由希望覆盖行为不是完全或全无(因为对小数位数限制的调整落在指定范围内有效数字)。不幸的是,如果设置了有效数字属性,规范只是忽略任何小数或整数数字限制。
如果有人正在寻找一种方法来利用这两种类型的属性来格式化单个数字,下面是一个非常基本的示例,它连续使用两个构造函数(请注意,对于更复杂的格式化要求,这可能会很快变得困惑)。
const sigDigits = (n, min, max, minf, maxf) => {
let num = new Intl.NumberFormat('en-US', {
minimumSignificantDigits: min,
maximumSignificantDigits: max
})
.format(n);
num = new Intl.NumberFormat('en-US', {
minimumFractionDigits: minf,
maximumFractionDigits: maxf
})
.format(num);
return num;
};
const result = sigDigits(10.123456789, 1, 3, 0, 0);
console.log(result);
// 10
关于javascript - 将 `Intl.NumberFormat` 与 `maximumFractionDigits` 和 `maximumSignificantDigits` 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55834596/