JavaScript-js小数相加的一个问题

WordPress 开发 WordPress 开发 主题:1098 回复:2322

JavaScript-js小数相加的一个问题

虐人心 发布于 2017-04-22 字数 120 浏览 1113 回复 3

alert(0.1 + 0.1 == 0.2); //输出true
alert(0.1 + 0.2 == 0.3); //输出false
为何0.1 + 0.2 == 0.3 为false。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(3

浮生未歇 2017-05-30 3 楼

浮点数判断一般都不带这样判断的,js也不例外,最好算差在某个较小的数之间

瑾兮 2017-05-12 2 楼

Javascript的数字类型是以64位的IEEE 754格式存储的.

十进制0.1

=> 二进制0.00011001100110011…(循环0011)

=>尾数为1.1001100110011001100…1100(共52位,除了小数点左边的1),指数为-4(二进制移码为00000000010),符号位为0

=> 存储为:0 00000000100 10011001100110011…11001

=> 因为尾数最多52位,所以实际存储的值为0.00011001100110011001100110011001100110011001100110011001

十进制0.2

=> 二进制0.0011001100110011…(循环0011)

=>尾数为1.1001100110011001100…1100(共52位,除了小数点左边的1),指数为-3(二进制移码为00000000011),符号位为0

=> 存储为:0 00000000011 10011001100110011…11001

因为尾数最多52位,所以实际存储的值为0.00110011001100110011001100110011001100110011001100110011

0.00011001100110011001100110011001100110011001100110011001

  • 0.00110011001100110011001100110011001100110011001100110011
    = 0.01001100110011001100110011001100110011001100110011001100
    转换成10进制之后得到:0.30000000000000004!
偏爱自由 2017-05-04 1 楼

浮点数判断大小:

<html>
<body>
<script>
alert(0.2 < 0.2+0.1 && 0.2 > 0.2-0.1); //判断0.2 == 0.2
alert(0.02 < 0.02+0.01 && 0.02 > 0.02-0.01); //判断0.02 == 0.02
alert(0.002 < 0.002+0.001 && 0.002 > 0.002-0.001); //判断0.002 == 0.002
alert(0.0002 < 0.0002+0.0001 && 0.0002 > 0.0002-0.0001); //判断0.0002 == 0.0002
</script>
</body>
</html>