1

重複の可能性:
なぜ99.99 / 100=0.9998999999999999
浮動小数点数の精度の問題に対処するのか

私はこの問題をphpとjavascriptで見ました。私はこの番号を持っています:float 0.699

これを行う場合:0.699 x 100 = 69.89999999999999

なぜ?

編集

round(0.699 x 10, 2):フロート69.90000000000001

4

6 に答える 6

10

浮動小数点演算は正確ではありません。

問題の詳細については、ウィキペディアの浮動小数点を参照してください。

于 2010-06-01T14:07:12.017 に答える
5

これは過去に私を助けたものです。それは、物事がバイナリでどのように表されるかと多くの関係があります。基本的に2進数で短い長い話は、大きな数のす​​べての実数の正確な数はありません。

以下のリンクはあなたのためにそれをより詳細に説明します。

すべてのコンピューター科学者が浮動小数点演算について知っておくべきこと

于 2010-06-01T14:11:59.900 に答える
2

これはどの言語でも起こります。フロートは、コンピューター上の他のすべてのものと同様に、バイナリとして保存されます。数値0.699は、正確に10進数で表すことができますが、おそらく2進数の循環小数であるため、正確な精度で格納することはできません。

フロートがどのように保存されるか、そしてなぜこれが起こるのかについては、ウィキペディアのエントリをチェックしてください。

于 2010-06-01T14:11:01.533 に答える
1

Javascript番号は浮動小数点です。

完全なJavaScript番号リファレンスをご覧ください。抜粋:

Javascriptのすべての数値は、64ビット(8バイト)の浮動小数点数であり、この記事の執筆時点で5e-324(負)から1.7976931348623157e + 308(正)の有効範囲になります(これは、最終的に128ビットに変更される可能性があります。 64ビットプロセッサが一般的になり、ECMA標準が進化するにつれて将来的になります)。

整数は、15桁(9e15)1に対して信頼できる(ピリオドまたは指数表記のない数値)と見なされます。浮動小数点数は、可能な限り信頼できると見なされ、それ以上は考慮されません。0.06 + 0.01は0.07ではなく0.06999999999999999に解決されるため、これは通貨操作について理解するための特に重要な概念です。

于 2010-06-01T14:09:44.477 に答える
0

浮動小数点、特にIEEE754と表現可能な数値のセクションを見てください。

于 2010-06-01T14:12:44.610 に答える
0

この動作は、C++やアセンブリを含む多くのプログラミング言語で再現できます。その理由は、FPUによる浮動小数点フォーマットを使用しているためです。あなたはここで詳細を読むことができます:

http://www.arl.wustl.edu/~lockwood/class/cs306/books/artofasm/Chapter_14/CH14-1.html#HEADING1-19

一般的な規則:浮動小数点演算の正確な結果を期待しないでください。2つの浮動小数点数を比較しないでください。たとえば、間隔を使用します。たとえば、f1 == f2をテストする代わりに、f1>(f2 -e)とf1 <(f2 + e)を使用します。eは小さな値です。

于 2010-06-01T14:15:24.650 に答える