2013-10-11 144 views
1
CREATE FUNCTION cleanAmount(amount DECIMAL) 
    RETURNS decimal(30,2) 
    LANGUAGE SQL 
    DETERMINISTIC 
    NO SQL 
    SQL SECURITY DEFINER 
    COMMENT '' 
BEGIN 
DECLARE res DECIMAL; 
SET res=CAST(COALESCE(amount,0.00) AS DECIMAL(30,2)); 
RETURN res; 
END 

SELECT cleanAmount('3.456');返回3,00。它应该是3,46Mysql存储函数返回错误值

+0

试试'ROUND'而不是'CAST'?例如:'ROUND(3.456.2)' – InSane

+0

'SET res = ROUND(amount,2);'返回3,00。 'SELECT CAST(COALESCE(3.456,0.00)AS DECIMAL(30,2))'返回3.46:s –

+0

即使将该行更改为SET res = amount;返回3.00 – Kickstart

回答

2

变化在存储过程中资源的宣告: -

CREATE FUNCTION cleanAmount(amount DECIMAL(60,30)) 
    RETURNS decimal(30,2) 
    LANGUAGE SQL 
    DETERMINISTIC 
    NO SQL 
    SQL SECURITY DEFINER 
    COMMENT '' 
BEGIN 
DECLARE res DECIMAL(30,2); 
SET res=CAST(COALESCE(amount,0.00) AS DECIMAL(30,2)); 
RETURN res; 
END 
+0

我已经尝试过,但没有更改。 'DECLARE res DECIMAL(30,2);' –

+0

试着改变输入参数declare(当我测试它时,我也改变了它)。我现在编辑了我的答案以表明这一点。 – Kickstart

+0

谢谢:)它的工作原理 –

1

缺省小数四舍五入可能你的号

DECLARE资源DECIMAL(30,2)