問題:分析:
首先檢視資料庫中的資料定義,均為decimal(12,2) ,直接通過資料庫查詢的結果也會保留兩位小數,但是**處理後,卻會忽略掉最後乙個「零」位。
此處有兩個解決方案:
一、 **中處理,檢測到為金額字段,做特殊處理;二、修改查詢sql語句去規避此問題; 第一種方法,無論通過資料型別還是欄位名稱,都不好判斷是否為金額,故選用第二種方法。
sql中保留兩位小數的方法有三種,(第2、3種方法類似):
1、使用round()函式,round返回乙個數值,捨入到指定的長度或精度,使用示例:
selectround(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
asdecimal(13,2)) --
13.12
這三種方法(其實是兩種),還是有區別的,區別在於round()只是進行四捨五入,仍然會保留後面的位數為0,但是convert()和cast() 卻會截斷後面的位數,示例:
selectconvert(decimal(13,2),13.123) --
13.12
select
cast(13.123
asdecimal(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)
示例:
selectrtrim('
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 承...