1

一連の計算を行う一連のストアド プロシージャがありますが、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
4

1 に答える 1

0

これは、「フロートはそんなに悪いのですか?」というあなたの質問に答えるだけです...

誰かに小数点以下 15 桁まで支払うように依頼しようとしていますか? ;)money小数点以下 4 桁の精度しかないように見えるためです。

あの有名なことは、使うのをためらうなら、あれやこれfloatで理にかなっている。しかし、あなたの場合、必要なことを行い、小数点以下15桁までの精度を提供します。しかし、それは近似データ型です。したがって、お金に使用したい場合は、精度があまり高くないことを意味します.floatfloatfloat

したがって、その場合はdecimalorを使用したほうがよいでしょうmoney

参照:

于 2013-01-14T14:02:07.647 に答える