7

我做了这个简单的函数,结果返回 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);
4

1 回答 1

9

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

RETURNS DECIMAL(5,2) -- 999.99

十进制、数字

SQLFiddle 示例

于 2012-09-13T00:36:06.720 回答