4

私はレガシー ASP アプリケーションに取り組んでいます。値 (40.33) を SQL Server 2000 の float 型のフィールドに挿入しようとしています。アプリケーションで (いくつかのログを介して) 見ることができるすべての場所は、ストアド プロシージャに 40.33 を送信しています。呼び出し中にデータベースに対して SQL プロファイラーを実行すると、トレースに表示される値は 4.033000183105469e+001 です。

余分なゴミはどこから来るのですか (183105469)?

40 または 40.25 を渡すと、余分なものがないのはなぜですか?

これは、フロートを使用することの奇妙な副作用の 1 つにすぎませんか? 私が何かを書いているとき、私は通常、money や decimal などを使用するので、float データ型にはあまり慣れていません。

4

3 に答える 3

8

はい、これはよく知られていますが、FLOAT を使用した場合の奇妙な副作用です。

Microsoft SQL Server では、スケール付きの正確な数値が必要な場合は、 NUMERIC、DECIMALMONEY、または SMALLMONEYなどの正確な数値データ型を使用する必要があります。

FLOAT を使用しないでください。

于 2008-10-29T19:43:00.153 に答える
0

これはおそらく精度の問題だと思います.数値の0.33の部分は2進数で正確に表すことができません.これはおそらくあなたが得ることができる最も近いものです.

于 2008-10-29T19:42:45.413 に答える
0

問題は、float が 100% 正確ではないことです。数値を正確にする必要がある場合 (特に金銭的な値を扱う場合)... Decimal 型を使用する必要があります。

于 2008-10-29T19:43:59.747 に答える