mysql format函數形成的計算時的精度缺失問題

說明

問題緣由:mysql formt函數會對數字進行每3位加一個逗號
例如:一個數 10000000 使用format函數格式化後會變成 10,000,000
問題描述:當某個表有一個金額列 money 類型爲 decimal(12,5) , 此時頁面上須要展現3位小數,合計列也是如此,這是 用 format(money,3) 格式化每一列都正常, 可是統計總計的時候就出問題了 ,sum(format 過的金額列) 算出的金額(在某一列金額超過3位數的時候format 會給其添加逗號,會出現問題 就會很離譜)mysql

舉例說明

例子

  • 現有一個表test,有id,name,money 三列,測試數據以下
    id name money
    1 蘋果 5.00000
    2 小米手機 1999.99000
    3 李子 3.00000
  • money 列保留3位小數的同時,並計算money的總值
    1. 先格式化每列的3位小數
      代碼以下
      SELECT id,NAME,FORMAT(money,3) money FROM test
      結果
      id name money
      1 蘋果 5.000
      2 小米手機 1,999.990
      3 李子 3.000
    2. 在這個基礎上算總值
      SELECT SUM(money) FROM (SELECT id,NAME,FORMAT(money,3) money FROM test ) t
      結果
      sum(money)
      9

說明

經過上述例子,說明 format 函數最好只在進行合計列計算後展現的時候格式化使用,否則會出現很大的問題,直接將精度算沒了sql

解決辦法

通常數字的轉換和格式化,仍是建議使用以下方法,不會對數字進行加逗號處理
convert(列名, 數據類型如:decimal(12,2))
cast(列名 as 數據類型如:decimal(12,2))
ROUND(列名或值,精度)函數

相關文章
相關標籤/搜索