SQL Serverでは、なぜ12538335.3は10進数ではないのですか(10,4)?それもdecimal(11, 4)
ではありませんが、decimal(12, 4)
です。SQL Serverでは、なぜ12538335.3は小数点以下(10,4)ではありませんか?
12,4
CREATE TABLE T (d decimal(10, 4) NOT NULL)
INSERT INTO T (d)
VALUES (12538335.3)
-- Arithmetic overflow error converting numeric to data type numeric.
ALTER TABLE T ALTER COLUMN d decimal(11, 4)
INSERT INTO T (d)
VALUES (12538335.3)
-- Arithmetic overflow error converting numeric to data type numeric.
ALTER TABLE T ALTER COLUMN d decimal(12, 4)
INSERT INTO T (d)
VALUES (12538335.3)
-- OK
あなたは '.3'の右側に3つのゼロを数えていないので。 'Decimal(10,4)'は**常に** int部分の最大(10-4)桁と小数部分の4桁を意味します。この場合、 '12538335'は8桁で、6桁ではありません。 – Lamak
**ドキュメント**(https://docs.microsoft。com/en-us/sql/t-sql/data-types/decimal-and-numeric-transact-sql)を参照すると、2つの数字は**合計**桁数(10)を意味します。カンマ(4)の後の桁数。したがって、10進数(10,4)は、10桁**合計**を意味します。そのうち小数点以下4桁です(従って、小数点以下6桁)。あなたの数字はあなたのデータ型に合う** **大きすぎます! –
12,538,335.3この数字に9桁の有効数字があります。そのうちの1つは10進数です。だから9,1は動作します。あなたの小数点以下の桁数が4桁でない理由は、その左側に6個しかありません。小数点の左にある8つの数字が「あふれない」ことを意味します。 99,999,999.9999を保存する必要がある場合は、左に(12,4)8桁、右に合計4を設定する必要があります。 – xQbert