量化

QUANTIZE 函數會傳回在值中等於 (除了任何捨入之外) 的十進位浮點數值,以及 expression-1 的符號,且其指數集等於 expression-2中的指數。

讀取語法圖跳過視覺化語法圖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 特殊值的結果: 十進位浮點特殊值的處理方式如下:
  • 如果任一引數是 NaN ,且第一個引數不是-NaN,則會傳回 NaN
  • 如果任一引數是 sNaN,則會發生警告或錯誤。 1
  • 如果任一引數是-NaN ,且第一個引數不是 NaN,則會傳回-NaN
  • 如果任一引數為-sNaN,則會發生警告或錯誤。 1
  • 如果兩個引數都是 無限 (正數或負數) ,則會傳回 無限 (正數或負數)。
  • 如果一個引數是 Infinity (正數或負數) ,而另一個引數不是 Infinity (正數或負數) ,則會傳回 NaN1

範例

  • 下列範例說明在給定輸入 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 及警告。