我有一个奇怪的问题,在 ng-bind 中使用数学表达式时,结果出乎意料。根据我的实验,仅当 summand 的第一部分为 15 以上且第二部分仅为 1.112 时才会出现问题。
ng-bind="sum = 16 + 1.112" ng-model="sum" value="16.112000000000002"
我有一个奇怪的问题,在 ng-bind 中使用数学表达式时,结果出乎意料。根据我的实验,仅当 summand 的第一部分为 15 以上且第二部分仅为 1.112 时才会出现问题。
ng-bind="sum = 16 + 1.112" ng-model="sum" value="16.112000000000002"
这是一个标准的浮点舍入问题。浮点数以 2 为基数表示,因此大多数有限十进制分数没有精确表示为(二进制)浮点数。JavaScript 使用 53 位精度的 IEEE754 双精度数字,最接近 1.112 的数字是
1.1120000000000000994759830064140260219573974609375
加上 15 需要超过 53 位来表示有效位,所以必须四舍五入,结果是
16.11200000000000187583282240666449069976806640625
并且大于最接近 16.112 的 IEEE754 双精度数,即
16.111999999999998323119143606163561344146728515625
因此显示 16.112 之后的第一个非零数字,以将其与最接近 16.112 的数字区分开来