Py学习  »  Git

同时将'intl.numberFormat'与'maximumFractionDigits'和'maximumSignificantDigits'一起使用

David Mulder • 4 年前 • 313 次点击  

运行时

console.log(new Intl.NumberFormat('en-US', {
  minimumFractionDigits: 0,
  maximumFractionDigits: 0,
  maximumSignificantDigits: 3,
  minimumSignificantDigits: 1 
}).format(10.123456789));

我希望产量 10 . 相反,由于某种原因,它输出 10.1 它打破了 maximumFractionDigits: 0 约束。发生什么事?考虑到这个限制在浏览器中被忽略了,这似乎是根据规范的,但我无法掩饰其原因。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38680
 
313 次点击  
文章 [ 1 ]  |  最新文章 4 年前
benvc
Reply   •   1 楼
benvc    5 年前

来自 Intl.NumberFormat parameter descriptions (增加了重点):

以下属性分为两组: minimumIntegerDigits , minimumFractionDigits maximumFractionDigits 在一组中, minimumSignificantDigits maximumSignificantDigits 另一个。 如果 定义第二个组中的至少一个属性,然后定义第一个 组被忽略。

必须有一些重写行为来处理属性设置冲突,但是在您的示例中,您可能会合理地希望重写行为不是全部或全部都是空的(因为对小数位数限制的调整在有效位数的指定范围内s)。不幸的是,如果设置了有效数字属性,那么规范只是忽略小数或整数的任何限制。

如果有人来找一种方法,利用这两种类型的属性来格式化一个数字,下面是一个非常基本的例子,连续使用这两个构造函数(注意,这会很快变得混乱,格式要求更复杂)。

const sigDigits = (n, min, max, minf, maxf) => {
  let x = new Intl.NumberFormat('en-US', {
    minimumSignificantDigits: min,
    maximumSignificantDigits: max
  }).format(n);
  return new Intl.NumberFormat('en-US', {
    minimumFractionDigits: minf,
    maximumFractionDigits: maxf
  }).format(x);
}

let result = sigDigits(10.123456789, 1, 3, 0, 0);
console.log(result);
// 10