

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# DECIMAL 或 NUMERIC 類型
<a name="Numeric_types-decimal-or-numeric-type"></a>

使用 DECIMAL 或 NUMERIC 資料類型，以*使用者定義的精確度*來儲存數值。DECIMAL 和 NUMERIC 關鍵字可互換使用。在本文件中，*小數*是此資料類型的首選用詞。*數值*一詞通常是用來指稱整數、小數和浮點資料類型。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/clean-rooms/latest/sql-reference/Numeric_types-decimal-or-numeric-type.html)

藉由指定 *precision* 和 *scale*，來定義資料表中的 DECIMAL 欄：

```
decimal(precision, scale)
```

 *precision*   
整個值中有效位數的總數：小數點兩邊的位數數量。例如，數字 `48.2891` 的精確度 (有效位數) 為 6，小數位數為 4。如果未指定，預設的精確度為 18，最高精確度為 38。  
 如果輸入值中小數點左側的位數超過資料欄的精確度減去其比例，則無法將該值複製到資料欄 （或插入或更新）。此規則適用於超出資料欄定義範圍之外的任何值。例如，`numeric(5,2)` 欄的值，其允許的範圍為 `-999.99` 到 `999.99`。

 *scale*   
數值小數部分中，位於小數點右邊的小數位數數目。整數的小數位數為 0。在資料欄的規格中，小數位數的值必須小於或等於精確度的值。如果未指定，預設的小數位數為 0，最大的小數位數為 37。  
如果載入資料表的輸入值，其小數位數大於資料欄的小數位數，則此值會四捨五入至指定的小數位數。例如，SALES 資料表中的 PRICEPAID 資料欄為 DECIMAL(8,2) 資料欄。如果將 DECIMAL(8,4) 值插入 PRICEPAID 資料欄，會將此值四捨五入為 2 個小數位數。  

```
insert into sales
values (0, 8, 1, 1, 2000, 14, 5, 4323.8951, 11.00, null);

select pricepaid, salesid from sales where salesid=0;

pricepaid | salesid
-----------+---------
4323.90 |       0
(1 row)
```
 不過，從資料表所選取值的明確轉換結果，不會四捨五入。

**注意**  
可以插入 DECIMAL(19,0) 資料欄的正數值上限為 `9223372036854775807` (263 -1)。負數值上限為 `-9223372036854775807`。例如，如果試圖插入數值 `9999999999999999999` (19 個 9)，將會造成溢位錯誤。無論小數點的位置何在， AWS Clean Rooms 可以表示為 DECIMAL 數值的最大字串是 `9223372036854775807`。例如，可以載入 DECIMAL(19,18) 資料欄的最大值為 `9.223372036854775807`。  
這些規則的原因如下：  
具有 19 個或更少有效位數精度的 DECIMAL 值會在內部儲存為 8 位元組整數。
精確度為 20 到 38 個有效位數的 DECIMAL 值會儲存為 16 位元組整數。

## 關於使用 128 位元 DECIMAL 或 NUMERIC 資料欄的備註
<a name="Numeric_types-notes-about-using-128-bit-decimal-or-numeric-columns"></a>

除非您確定應用程式需要該精確度，否則請勿任意指派最大有效位數給 DECIMAL 欄。128 位元值使用的磁碟空間是 64 位元值的兩倍，而且可能會減慢查詢執行時間。