sql >> データベース >  >> RDS >> Sqlserver

SQLServer2005の数値精度の低下

    浮動小数点型の加算が不正確であるのと同様に、精度を超えると、10進型の乗算が不正確になる(または不正確になる)可能性があります。 データ型の変換 を参照してください。 および10進数および数値 。

    NUMERIC(24,8)を乗算したので およびNUMERIC(24,8) 、およびSQL Serverは、コンテンツではなくタイプのみをチェックします。48桁の精度すべてを保存できない場合(最大は38)、10進数以外の潜在的な16桁(24〜8)を保存しようとします。それらの2つを組み合わせると、32の非10進数が得られ、6桁の10進数(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 Serverは、小数点以下の桁数が32桁になる可能性があるため、A + Dを保存しようとします。

    に減少します
    SELECT CAST(0.12345678 AS NUMERIC(38,6))
    

    これにより、0.123457 丸めた後。



    1. JPAリポジトリの2つのテーブルを結合する

    2. MySQLの各record_idのすべての列の最後のnull以外のレコードを取得します

    3. Pro * Cクエリで変数式リストを指定するにはどうすればよいですか?

    4. MySQL:MySQLテーブルのすべてのレコードの内部レコード識別子のようなものはありますか?