打开你的不等编程 Python,输入「0.1+0.2=」,于原语结果是不等编程多少?0.30000000000000004 对不对?为什么结果不是 0.3?本文作者给出了详细的解释。
从小我们就知道 0.1 + 0.2=0.3。于原语但是不等编程,在光怪陆离的于原语计算世界中,运算方式却大相径庭。不等编程
我最近开始用 JavaScript 进行编码,于原语在阅读数据类型时,不等编程我注意到 0.1 + 0.2 不等于 0.3 的于原语奇怪行为。我向 Stack Overflow 寻求帮助,不等编程在上面找到了一些有用的于原语帖子。如下图所示:
同样,如果一个用科学计数法书写的数字小数点前有一个非零的十进制数,则该数字是标准化写法。例如,0.0005606 用科学计数法的标准化写法为:        
Significant 是指不包含零的有效数字,base 表示所使用的进制——此处为十进制(10)。Exponent(指数)表示小数点需要向左或向右移动的步数。        现在,有两种显示浮点数的方法:单精度和双精度。在进行浮点运算时,单精度使用 32 位,而双精度使用 64 位。        与许多其他编程语言不同,JavaScript 并未定义不同类型的数字数据类型,而是网站模板始终遵循国际 IEEE 754 标准,将数字存储为双精度浮点数。        这种格式以 64 位存储数字,其中数字(分数)存储在位 0 到 51 中,指数存储在位 52 到 62 中,符号存储在位 63 中。        
重复此操作至 64 位。然后把它们按升序排列,获取尾数,再根据双精度标准,我们将把其四舍五入到 52 位。
尾数用科学计数法表示二进制 0.1 并只保留前 52 位:
尾数部分处理好后。现在我们用下面的方式处理指数:
这里,11 代表我们要使用的 64 位表示的指数位数,-4 代表科学计数中的指数。        所以最终数字 0.1 的表示形式是:        
同理,香港云服务器0.2 表示为:         
将两个数相加,得到:         
转换为浮点数,它变成:
这就是 0.1 + 0.2 = 0.30000000000000004 的原因。