0

ng-bindで数式を使用すると、予期しない結果になるという奇妙な問題があります。私の実験に基づくと、問題は、被加数の最初の部分が15であり、2番目の部分が1.112である場合にのみ発生します。

ng-bind = "sum = 16 + 1.112" ng-model = "sum" value = "16.112000000000002"

4

1 に答える 1

3

これは、標準の浮動小数点の丸めの問題です。浮動小数点数は基数 2 で表されるため、ほとんどの有限小数は (2 進) 浮動小数点数として正確に表現されません。JavaScript は、精度が 53 ビットの IEEE754 倍精度数値を使用します。1.112 に最も近い数値は、

1.1120000000000000994759830064140260219573974609375

これに 15 を加算すると、仮数を表すのに 53 ビット以上が必要になるため、丸めを行う必要があり、結果は次のようになります。

16.11200000000000187583282240666449069976806640625

これは、16.112 に最も近い IEEE754 の倍精度数よりも大きく、次のようになります。

16.111999999999998323119143606163561344146728515625

したがって、16.112 に最も近い数字と区別するために、16.112 の後の最初のゼロ以外の数字が表示されます。

于 2012-12-03T02:37:33.997 に答える