0.9.toLocaleString() // => '0.9' 0.99.toLocaleString() // => '0.99' 0.999.toLocaleString() // => '0.999' 0.9999.toLocaleString() // => '1'
ちょっと驚いたので調べた。
- Number.prototype.toLocaleString() - JavaScript | MDN
Intl.NumberFormat API に対応している実装においては、このメソッドは単に Intl.NumberFormat を呼び出します。
- Intl.NumberFormat() constructor - JavaScript | MDN
maximumFractionDigits
: The maximum number of fraction digits to use. [...] the default for plain number formatting is the larger of minimumFractionDigits and 3roundingMode
: How decimals should be rounded. [...] "halfExpand" (default)
というわけで、以下と同じことをしていたらしい。
new Intl.NumberFormat({maximumFractionDigits: 3, roundingMode: "halfExpand"}).format(0.9999) // => '1'
より詳しくは ECMAScript® 2024 Internationalization API Specification を参照したらいいと思う。