SQL 保留兩位小數的實現方式

2022-06-21 12:48:07 字數 1800 閱讀 1039

問題:

分析:首先檢視資料庫中的資料定義,均為decimal(12,2) ,直接通過資料庫查詢的結果也會保留兩位小數,但是**處理後,卻會忽略掉最後乙個「零」位。

此處有兩個解決方案:

一、 **中處理,檢測到為金額字段,做特殊處理;二、修改查詢sql語句去規避此問題; 第一種方法,無論通過資料型別還是欄位名稱,都不好判斷是否為金額,故選用第二種方法。

sql中保留兩位小數的方法有三種,(第2、3種方法類似):

1、使用round()函式,round返回乙個數值,捨入到指定的長度或精度,使用示例:

select round(123.9994, 3)   --123.9990

select round(123.9995, 3) --124.0000

select round(748.584, -1) --750.000

select round(748.586, -2) --700.000

select round(748.586, -3) --error 將expression轉換為資料型別 numeric 時出現算術溢位錯誤

select round(748.586, -4) --0.000,如果length為負數,並且大於小數點前的數字個數,則round將返回 0

select round(151.75, 0,0) --152.00 捨入

select round(151.75, 0,1) --151.00 截斷

2、使用convert()函式,使用示例:

select convert(decimal(13,2),13.123) --13.12 

3、使用cast()函式,使用示例:

select cast(13.123 as decimal(13,2)) --13.12 

這三種方法(其實是兩種),還是有區別的,區別在於round()只是進行四捨五入,仍然會保留後面的位數為0,但是convert()和cast() 卻會截斷後面的位數,示例:

select convert(decimal(13,2),13.123)    --13.12

select cast(13.123 as decimal(13,2)) --13.12

select round(13.123,2) --13.120

根據需求這裡採用第2種方案,但是僅這樣處理還是不夠的,返回的float型,經過**處理後,仍然會捨去最後的"0"位。

最終的解決方案為:資料庫查詢時,把float型資料轉換為字元型,再交由**處理返回給客戶端。

具體實現為:

select rtrim(convert(decimal(13,2),13.123)) 

附rtrim()的用法,返回刪除了尾隨空格的字元表示式。:

rtrim(character expression)
示例:

select rtrim('hello   ')+'%'                    --hello%

select rtrim('hello')+'%' --hello%

select rtrim('hello ' + '' + 'world ')+'%' --helloworld%

select rtrim('hello ' + '' + 'world ')+'%' --hello world%

select rtrim('hello' + ' ' + 'world ')+'%' --hello world%

SQL 保留兩位小數的實現方式

問題 分析 首先檢視資料庫中的資料定義,均為decimal 12,2 直接通過資料庫查詢的結果也會保留兩位小數,但是 處理後,卻會忽略掉最後乙個 零 位。此處有兩個解決方案 一 中處理,檢測到為金額字段,做特殊處理 二 修改查詢sql語句去規避此問題 第一種方法,無論通過資料型別還是欄位名稱,都不好...

Sql 保留兩位小數

sql中欄位保留兩位小數 使用round 函式,如round number,2 其中引數2表示保留兩位有效數字,但是只負責四捨五入到兩位小數,但是不負責截斷 例如round 3.141592653,2 結果為3.140000000 使用convert decimal 10,2 number 實現轉換...

SQL保留兩位小數用法

sql server中除法,會遇到除數為0的情況,且保留兩位小數,寫法如下 select case when num 0 then 0 else convert decimal 18,2 210.343 num end as 結果 from tabnumber select carrier as 承...