SQL 數值進位處理:四捨五入到整數、無條件捨去到整數、無條件進位到整數、無條件捨去到指定的有效位數

Home / PHP / SQL 數值進位處理:四捨五入到整數、無條件捨去到整數、無條件進位到整數、無條件捨去到指定的有效位數

SQL 中針對數值進位有幾個相關函式:

  1. CEILING(numeric_expression): 傳回大於或等於指定數值運算式的最小整數
  2. FLOOR(numeric_expression):傳回小於或等於指定數值運算式的最大整數
  3. ROUND(numeric_expression,length):傳回數值,四捨五入到指定的長度或有效位數。(length為指定的小數點後有效位數

註:針對 float 格式欄位或 real 格式欄位使用ROUND函數,請先轉換成 decimal,因為 float 與 real 都是近似值,若直接處理,可能會得到奇怪的答案。

例:
1.

  • SELECT CEILING(123.45) ==> 結果: 124
  • SELECT CEILING(-123.45) ==> 結果: -123

2.

  • SELECT FLOOR(123.45) ==> 結果: 123
  • SELECT FLOOR(-123.45) ==> 結果: -124

3.
註:針對 float 或 real 格式欄位使用ROUND函數,請先轉換成 decimal ,因為float 與 real 都是近似值,若直接處理,可能會得到奇怪的答案。

下列為了方便閱讀,並未轉換成decimal

  • SELECT ROUND(123.44,1) ==> 結果: 123.40
  • SELECT ROUND(123.45,1) ==> 結果: 123.50
  • SELECT ROUND(123.45,0) ==> 結果: 123.00
  • SELECT ROUND(123.55,0) ==> 結果: 124.00
  1. 如果有效位數指定為負值,則會以[四捨五入 ]方式,進位到小數點前指定位數
    • SELECT ROUND(125.55, 0) ==> 結果: 124.00 (四捨五入到個位數)
    • SELECT ROUND(125.55,-1) ==> 結果: 130.00 (四捨五入到十位數)
    • SELECT ROUND(125.55,-2) ==> 結果: 100.00 (四捨五入到百位數)
  2. 有效位數指定為負值,但指定位數不存在時的特殊狀況:
    • SELECT ROUND(125.55,-3) ==> 結果: 0.00 (四捨五入到千位數,但千位數不存在時,若是[捨去]則後面位數全部變成0)
    • SELECT ROUND(523.45,-3) ==> 結果:執行批次時發生錯誤。錯誤訊息為: 算術溢位。 (四捨五入到千位數,但千位數不存在時,若是[進位]則會發生算數溢位錯誤,不過這是直接針的數值處理的狀況,,如果轉成decimal則可順利執行,如下式)
    • SELECT ROUND(CAST(523.45 AS decimal),-3) ==>結果:1000 (轉換成decimal擴充有效位數時)
23667 全部 70 今日

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

*