JavaScript如何确定格式化浮点值时生成的位数?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JavaScript如何确定格式化浮点值时生成的位数?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1848字,纯文字阅读大概需要3分钟。
内容图文
![JavaScript如何确定格式化浮点值时生成的位数?](/upload/InfoBanner/zyjiaocheng/714/e540413caac6487189d23a488e4a40e3.jpg)
在JavaScript中,每个人都知道着名的计算:0.1 0.2 = 0.30000000000000004.但是为什么JavaScript打印这个值而不是打印更准确和精确的0.300000000000000044408920985006?
解决方法:
将Number值转换为十进制数字时,JavaScript的默认规则是使用足够的数字来区分Number值. (您可以使用toPrecision方法请求更多或更少的数字.)
JavaScript使用IEEE-754基本64位二进制浮点作为其Number类型.使用IEEE-754,.1 .2的结果正好是0.3000000000000000444089209850062616169452667236328125.结果来自:
>将“.1”转换为数字类型中可表示的最近值.
>将“.2”转换为数字类型中可表示的最近值.
>添加上述两个值并将结果舍入到Number类型中可表示的最近值.
格式化此数字值以进行显示时,“0.30000000000000004”只有足够的有效数字来唯一地区分该值.要查看此信息,请观察相邻值是:
> 0.299999999999999988897769753748434595763683319091796875,
> 0.3000000000000000444089209850062616169452667236328125,和
> 0.300000000000000099920072216264088638126850128173828125.
如果转换为十进制数字仅产生“0.3000000000000000”,则它将更接近0.299999999999999988897769753748434595763683319091796875而不是0.3000000000000000444089209850062616169452667236328125.因此,需要另一个数字.当我们有这个数字“0.30000000000000004”时,结果比它的任何一个邻居更接近0.3000000000000000444089209850062616169452667236328125.因此,“0.30000000000000004”是最短的十进制数字(忽略了用于美学目的的前导“0”),其唯一地区分原始值的可能数值.
此规则来自ECMAScript 2017语言规范的第7.1.12.1节中的步骤5,这是将Number值m转换为ToString操作的十进制数字的步骤之一:
Otherwise, let n, k, and s be integers such that k ≥ 1, 10k‐1 ≤ s < 10k, the Number value for s × 10n‐k is m, and k is as small as possible.
这里的措辞有点不精确.我花了一段时间才弄清楚通过“s×10n-k的数值”,标准意味着数值是将数学值s×10n-k转换为数字类型的结果(与通常一样)四舍五入).在本说明书中,k是将要使用的有效位数,并且此步骤告诉我们将k最小化,因此它表示使用最小数量的数字,这样当我们生成的数字将转换回数字时输入,产生原始数字m.
内容总结
以上是互联网集市为您收集整理的JavaScript如何确定格式化浮点值时生成的位数?全部内容,希望文章能够帮你解决JavaScript如何确定格式化浮点值时生成的位数?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。