我做了这个简单的函数,结果返回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);
答案 0 :(得分:9)
因为您没有指定precision
和scale
这就是为什么它会使值四舍五入。精度表示为值存储的有效位数,刻度表示小数点后可存储的位数。默认情况下,精度值为10
,缩放值为0
。因此,RETURNS DECIMAL
与RETURNS DECIMAL(10,0)
相同。如果比例为0,则 DECIMAL值不包含小数点或小数部分。尝试指定您的功能。
RETURNS DECIMAL(5,2) -- 999.99
<强> DECIMAL, NUMERIC 强>