量化
QUANTIZE 函數會傳回在值中等於 (除了任何捨入之外) 的十進位浮點數值,以及 expression-1 的符號,且其指數集等於 expression-2中的指數。
- expression-1
- 傳回任何內建數值、字串或圖形字串資料類型的值的表示式。 如果引數的資料類型不是 DECFLOAT 值,則會轉換為 DECFLOAT (34) 進行處理。
- expression-2
- 傳回任何內建數值、字串或圖形字串資料類型的值的表示式。 如果引數的資料類型不是 DECFLOAT 值,則會轉換為 DECFLOAT (34) 進行處理。
如果一個引數 (轉換之後) 是 DECFLOAT (16) ,另一個是 DECFLOAT (34) ,則在處理函數之前, DECFLOAT (16) 引數會轉換為 DECFLOAT (34)。
結果的係數衍生自 expression-1的係數。 必要的話,它會四捨五入 (如果要增加指數) ,乘以 10 次方 (如果要減少指數) ,或維持不變 (如果指數已等於 expression-2的指數)。
必要的話, QUANTIZ 函數會使用捨入模式。 如需相關資訊,請參閱 CURRENT DECFLOAT ROUNDING MODE 。
與 DECFLOAT 資料類型上的其他算術運算不同,如果量化運算之後的係數長度將大於產生的 DECFLOAT 數字的精準度,則會發生錯誤。 這可保證除非發生錯誤,否則 QUANTIze 函數的結果指數一律等於 expression-2的結果指數。
如果兩個引數都是 DECFLOAT (16) ,則函數的結果是 DECFLOAT (16) 值。 否則,函數的結果是 DECFLOAT (34) 值。 如果任一引數可以是空值,則結果可以是空值; 如果任一引數是空值,則結果是空值
附註
範例
- 下列範例說明在給定輸入 DECFLOAT 引數的情況下,針對 QUANTIZ 函數所傳回的值:
QUANTIZE(2.17, 0.001) ==> 2.170 QUANTIZE(2.17, 0.01) ==> 2.17 QUANTIZE(2.17, 0.1) ==> 2.2 QUANTIZE(2.17, 1e+0) ==> 2 QUANTIZE(2.17, 1e+1) ==> 0E+1 QUANTIZE(2, Infinity) ==> NaN (exception) QUANTIZE(0, 1e+5) ==> 0E+5 QUANTIZE(217, 1e-1) ==> 217.0 QUANTIZE(217, 1e+0) ==> 217 QUANTIZE(217, 1e+1) ==> 2.2E+2 QUANTIZE(217, 1e+2) ==> 2E+2 - 在下列範例中,會針對 QUANTIze 函數傳回值 -0。 CHAR 函數是用來避免用戶端程式可能移除減號。
CHAR(QUANTIZE(-0.1, 1)) ==> -0 - 向上捨入十進位數。 使用 CURRENT DECFLOAT ROUNDING MODE 特別暫存器來指定如何執行捨入。 將函數結果強制轉型回十進位值。
SET CURRENT DECFLOAT ROUNDING MODE = ROUND_UP VALUES CAST(QUANTIZE(765.4321, .01) AS DECIMAL(7, 2)) ==> 765.44
1 如果對 SQL_DECFLOAT_WARNINGS 查詢選項指定 *YES ,則會傳回 NaN 及警告。
