我的MySQL函数在乘以小数时完全失去了数学精度.为什么


My MySQL function totally loses math precision when multiplying decimals. Why is that?

我做了这个简单的函数,结果返回1而不是0.5

我做错了什么?

DELIMITER //
DROP FUNCTION IF EXISTS test_decimal //
CREATE FUNCTION test_decimal(input DECIMAL)
  RETURNS DECIMAL
BEGIN
  SET @_credit = 0.5;
  RETURN input * @_credit;
END //
DELIMITER ;
SELECT test_decimal(1);

因为没有指定precisionscale,所以对值进行四舍五入。精度表示为值存储的有效位数,小数位数表示小数点后可以存储的位数。默认情况下,精度的值为10,比例的值为0。因此,RETURNS DECIMALRETURNS DECIMAL(10,0)相同。如果小数位数为0,则DECIMAL值不包含小数点或小数部分。请尝试在函数中指定。

RETURNS DECIMAL(5,2) -- 999.99

十进制,数字

SQLFiddle示例