【发布时间】:2019-04-04 09:43:55
【问题描述】:
如果a 和b 是小于Number.MAX_SAFE_INTEGER 的正整数,并且a 可以被b 整除,那么是否保证console.log(a / b) 将输出一个整数(而不是一个数字以.9999999999) 结尾?另外,a % b === 0 会一直持有吗?
【问题讨论】:
标签: javascript floating-point precision division
如果a 和b 是小于Number.MAX_SAFE_INTEGER 的正整数,并且a 可以被b 整除,那么是否保证console.log(a / b) 将输出一个整数(而不是一个数字以.9999999999) 结尾?另外,a % b === 0 会一直持有吗?
【问题讨论】:
标签: javascript floating-point precision division
至少基于 ECMAScript 标准,applying / operator 的规则提到 该语言不执行整数除法,并且在典型情况下 计算商并四舍五入到最接近的值使用 IEEE 754-2008 舍入到最近的可表示值,与偶数模式相关。
因此,如果分子(在安全范围内)可以被非零分母整除,则结果必然是数学整数,因为IEE 754-2008 可以将其表示为一。
% 也一样,在这种情况下会产生 0。
【讨论】:
% 运算符必须产生零。舍入模式无关紧要。 IEEE 754 格式不代表“整数和浮点值”。它们表示浮点值,其中一些在数学上是整数。