SQL float列に値を挿入すると、奇妙な結果が生成されます
-
05-07-2019 - |
質問
レガシーASPアプリケーションに取り組んでいます。浮動小数点型であるSQL Server 2000のフィールドに値(40.33)を挿入しようとしています。アプリケーションで(ログを介して)表示されるすべての場所が、ストアドプロシージャに40.33を送信しています。呼び出し中にデータベースに対してSQLプロファイラーを実行すると、トレースに表示される値は4.033000183105469e + 001
です。(183105469)からの余分なゴミはすべてどこにありますか?
40または40.25を渡すと、余分なものがないのはなぜですか?
これは、floatを使用することによる奇妙な副作用の1つにすぎませんか?私が何かを書いているとき、私は通常お金か小数か何かを使います。そのため、floatデータ型に慣れていません。
解決
はい、これは奇妙ですが、よく知られています、使用の副作用フロート。
Microsoft SQL Serverでは、 NUMERIC、10進数、 MONEYまたはSMALLMONEY スケール付きの正確な数値が必要な場合。
FLOATは使用しないでください。
他のヒント
これはおそらく単なる精度の問題だと思います-数値の0.33の部分を正確にバイナリで表現することはできません-これはおそらく最も近いものです。
問題は、フロートが100%正確ではないことです。数値を正確にする必要がある場合(特に金額を扱う場合)... Decimalタイプを使用する必要があります。
所属していません StackOverflow