私はデータベースを正規化するプロセスを進めており、その1つのテーブルの列をFLOAT
からDECIMAL(28,18)
に変換しています。この変換後の列を元の列に戻すと、結果が返されない場合があります。MS SQLの浮動小数点比較の問題
これは、変換された方法とは関係がありません。例えば、DECIMAL(28,18)
に変換FLOAT
を生成します
51.051643260000006000
元FLOAT
私はFLOAT
を修正せず、いずれかのこれらの作業のいずれの様々な方法を試みた
51.05164326
ある:
CAST(51.05164326 AS DECIMAL(28,18)) = 51.051643260000000000
STR(51.05164326 , 28,18) = 51.0516432599999990
変換の理由は、これらのフィールドの精度を向上させるためです。
誰も、これらの数値を変換し、その後の結合を確実にすることができる一貫した戦略を得ていますか?あなたのアプリケーションのために事前に
おかげ
CM
浮動小数点数は正確な数値が、近似値ではありません。文字列への変換は通常、正確な数字のように見えるように丸めますが、正確な表現は実際には異なります。あなたはフロートで試してみてはいけません。 – Lucero
残念ながら私はたくさんの選択肢がありません。あなたはこれをラウンドする方法をお勧めしますか? – CatchingMonkey
私はこれを 'decimal'に変換してキャストし、[ROUND()']を使って14桁に丸めます(http://msdn.microsoft.com/en-us/library/ms175003.aspx )。 – Lucero