如何在mysql中使用带有case语句的两个小数点

时间:2014-01-14 15:21:52

标签: mysql sql case

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.

为什么要拖尾零?

2 个答案:

答案 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,
....