Intl.NumberFormat.prototype.format()中的默认舍入策略



我想了解使用Intl.NumberFormat.prototype.format()时隐式发生的小数舍入行为。format函数的MDN文档缺少对该行为的清晰描述。

让我们以下面这段代码为例:

const amount = 654321.985;
const formattedAmount = new Intl.NumberFormat('en-EN', {
style: 'currency',
currency: 'EUR',
}).format(amount);
console.log(formattedAmount); // => €654,321.99

在这种情况下舍入策略是什么?它依赖于什么?我认为这其中有很多因素,比如浏览器、语言环境和货币,但我找不到确切的证据。

在摆弄了这个示例之后,我可以看到小数点部分被四舍五入了一个美分,而下面的部分则向下,即.9849变成了.98。该策略似乎遵循了nearest integer, ties to even规则。同时,我理解在ECMAScript规范下,逻辑可能会更复杂。

MDN示例如下:

Intl.NumberFormat('en-EN', {
style: 'currency',
currency: 'EUR',
}).resolvedOptions()
// properties
currency: "EUR"
currencyDisplay: "symbol"
currencySign: "standard"
locale: "en"
maximumFractionDigits: 2
minimumFractionDigits: 2
minimumIntegerDigits: 1
notation: "standard"
numberingSystem: "latn"
signDisplay: "auto"
style: "currency"
useGrouping: true
__proto__: Object

你们在第13.2节和13.3节提供的TC39文档看起来非常有用:

// typing Intl.NumberFormat in console results takes you nowhere, but
// typing `Intl.NumberFormat.prototype` in console results in:
constructor: ƒ NumberFormat()
format:
formatToParts: ƒ formatToParts()
resolvedOptions: ƒ resolvedOptions()
Symbol(Symbol.toStringTag): "Intl.NumberFormat"
get format: ƒ format()

13.3.3内部槽:

必须是包含子字符串"{number}"的字符串值。"positivePattern"必须包含子字符串"{plusSign}"但不是"{minusSign}">

图案的形状似乎是positivePattern = "{plusSign}{number}">

也在13.4.5处达到峰值Intl.NumberFormat.prototype.resolvedOptions ():

[[MinimumIntegerDigits]]    "minimumIntegerDigits"
[[MinimumSignificantDigits]]    "minimumSignificantDigits"
[[MaximumSignificantDigits]]    "maximumSignificantDigits"

还有,别忘了检查MDN:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat

相关内容

  • 没有找到相关文章

最新更新