SQL server2005年の数値の精度の損失
-
02-07-2019 - |
質問
デバッグもファイナンスに関するSQLコードを見つけた不思議な問題の数値(24,8)数学ます。
走行は以下のクエリをご指定していますA+B-Cの発現結果を0.123457
を選択し、 B C A+B-C から ( 選択キャスト(0.12345678数値として(24,8))として、 キャスト(0数値として(24,8に使えるようにすると共に、B、 キャスト(500を数値として(24,8))C デジタルタイマプログラマ
しておりますので失われた2つの重要な記号です。ることができるようにこの固定方法が異なった転換の中間乗算結果はゼロ!) 数値(24,8いますよー。
ようにしています。もっ給排水は問題有る疑問を指定し動作するタイプの変換を実際に発生した私のサンプル?
解決
してのfloat型の正の演算の小数点以下の桁数を利用することができ不正確または誤りの原因)を超過した場合ます。見 データ型変換 や decimalやnumeric.
年額 NUMERIC(24,8)
や NUMERIC(24,8)
, は、SQL Serverのみチェックの種類なのでしょう存の16の非小数桁24-8)で保存すべての48桁の精度(maxは38)にまでさかのぼります。われている、32非小数桁を残すのみで6桁(38-32).
このように元のクエリー
SELECT A, B, C, A + B * C
FROM ( SELECT CAST(0.12345678 AS NUMERIC(24,8)) AS A,
CAST(0 AS NUMERIC(24,8)) AS B,
CAST(500 AS NUMERIC(24,8)) AS C ) T
に減少する
SELECT A, B, C, A + D
FROM ( SELECT CAST(0.12345678 AS NUMERIC(24,8)) AS A,
CAST(0 AS NUMERIC(24,8)) AS B,
CAST(500 AS NUMERIC(24,8)) AS C,
CAST(0 AS NUMERIC(38,6)) AS D ) T
再度、 NUMERIC(24,8)
や NUMERIC(38,6)
, SQLサーバーへの保存の可能性は32桁の部で"年"、小数部で"、 A + D
に減少する
SELECT CAST(0.12345678 AS NUMERIC(38,6))
まった 0.123457
四捨五入処理後.
他のヒント
以下の論が指摘するように eed3si9n 何と言ってましたお問いうのが数学の業務に抽出しの機能、また指定の精度が出せるため、表面処理オペレーションによ
この場合の機能とのように:
create function dbo.myMath(@a as numeric(24,8), @b as numeric(24,8), @c as numeric(24,8))
returns numeric(24,8)
as
begin
declare @d as numeric(24,8)
set @d = @b* @c
return @a + @d
end
でもどうに 精度、規模、長(取引-SQL).であると考えているものを最小限の規模が大き'(の小数点以下の桁数)6結果の数値タイプのための増幅と同じにな部門等