📣新登場!TiDB Cloud BYOC、TiDB Cloud Filesystem、PostgreSQL-compatible TiDB Cloud Starter がパブリックプレビュー中。このページは自動翻訳されたものです。原文はこちらからご覧ください。

Decimal



概要

DECIMAL(P, S) は、精度 P(全桁数、1–76)とスケール S(小数点以下の桁数、0–P)を持つ正確な数値を格納します。値は ±(10^P - 1) / 10^S の範囲内である必要があります。精度が 38 までの値には DECIMAL128 が使用され、それより大きい値には DECIMAL256 が使用されます。

例

CREATE TABLE invoices ( description STRING, amount DECIMAL(10, 2), tax_rate DECIMAL(5, 4) ); INSERT INTO invoices VALUES ('Laptop', 1299.99, 0.1300), ('Monitor', 399.50, 0.0750); SELECT description, amount, tax_rate, amount * tax_rate AS tax_value, amount + amount * tax_rate AS total_due FROM invoices;

結果:

┌─────────────┬──────────┬──────────┬────────────┬────────────┐ │ description │ amount │ tax_rate │ tax_value │ total_due │ ├─────────────┼──────────┼──────────┼────────────┼────────────┤ │ Laptop │ 1299.99 │ 0.1300 │ 168.998700 │ 1468.988700 │ │ Monitor │ 399.50 │ 0.0750 │ 29.962500 │ 429.462500 │ └─────────────┴──────────┴──────────┴────────────┴────────────┘

算術演算では精度が自動的に保持されます。加算では整数部と小数部のうち広い方が維持され、乗算では精度が加算され、除算では左オペランドのスケールが維持されます。必要な結果の形式がある場合は、明示的なキャストを使用してください。

SELECT SUM(amount) AS sum_default, CAST(SUM(amount) AS DECIMAL(12, 2)) AS sum_cast, AVG(amount) AS avg_default, CAST(AVG(amount) AS DECIMAL(12, 4)) AS avg_cast FROM invoices;

結果:

┌─────────────┬───────────┬────────────────┬──────────┐ │ sum_default │ sum_cast │ avg_default │ avg_cast │ ├─────────────┼───────────┼────────────────┼──────────┤ │ 1699.49 │ 1699.49 │ 849.74500000 │ 849.7450 │ └─────────────┴───────────┴────────────────┴──────────┘

演算によって整数部がオーバーフローする場合、TiDB Cloud Lake はエラーを返します。余分な小数桁は丸められずに切り捨てられます。これら 2 つの動作を制御するには、P/S を調整するか、結果をキャストしてください。

このページは役に立ちましたか?