SELECT (CASE FI_Type
WHEN 'Percentage' THEN FS_Price*FI_Ins_Amount/100
ELSE FI_Ins_Amount
END) AMOUNT,
`FI_Ins_NO`,
`FI_Type`,
`FS_Registration_Fee`,
`FS_Price`
FROM `fee_structure`
INNER JOIN `fee_installments` ON `fee_structure`.`FS_Code` = `fee_installments`.`FI_Stru_Code`
WHERE FS_Code='AL-ICT/1'
ORDER BY FI_Ins_NO ASC
FI_Ins_Amount,FS_Price
表定义为decimal(10,2)
。但是当使用此FI_Ins_Amount
语句返回CASE
并进行计算时,它会向我显示
FI_Ins_Amount = 20000.00000000
而非20000.00.
为什么要拖尾零?
答案 0 :(得分:1)
FS_Price is decimal
FS_Price/1 is float
1 is integer
1/1 is float
select cast(1/1 as decimal(10,2)) -- > decimal
分开时会发生。
* 使用round(float_value,2)可能会产生意外结果,具体取决于服务器版本
select ROUND(25E-1),cast(25E-1 as decimal(10))
-- >2, 3
预期结果是否远离0?好吧,Round
,在这种情况下不同意
对于你的情况,
CAST(CASE FI_Type
WHEN 'Percentage' THEN FS_Price*FI_Ins_Amount/100
ELSE FI_Ins_Amount
END as DECIMAL(10,2)) as AMOUNT,
答案 1 :(得分:0)
数学表达式创建了额外的零,而不是CASE
。如果您只需要两位小数,请尝试这样的操作,但请注意前端是格式化的最佳位置:
SELECT
ROUND(CASE FI_Type
WHEN 'Percentage' THEN FS_Price*FI_Ins_Amount/100
ELSE FI_Ins_Amount END, 2) AMOUNT,
....