一連の計算を行う一連のストアド プロシージャがありますが、10 進数型を使用すると精度が低下するようです。
以下の計算では 0.0493318673793 を期待していますが、代わりに 0.049331 を取得しています。私はさまざまなデータ型をテストしましたが、精度は float を使用した場合にのみ得られます (私が読んだのは避けるべきです)。
--Representative of SP
SELECT CAST(4000000.00 AS MONEY)/CAST(81083490.50 AS DECIMAL(34,26))
--0.049331
--Using greater decimal precision
SELECT CAST(4000000.00 AS MONEY)/CAST(81083490.50 AS DECIMAL(38,16))
--0.0493318
--Using Float
SELECT CAST(4000000.00 AS MONEY)/CAST(81083490.50 AS FLOAT)
--0.0493318673793403
フロートは本当に悪いですか?もしそうなら、どのような代替手段がありますか?
以下のハムレットのメモを探索します。以下が異なる出力を提供するのはなぜですか?
SELECT CAST(4000000.00 AS MONEY)/CAST(81083490.50 AS DECIMAL(38,16))
--0.0493318
SELECT CAST(4000000.00 AS MONEY)/CAST(81083490.50 AS DECIMAL(38,3))
--0.04933186737934031096