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

时间:2012-09-13 00:33:05

标签: php mysql sql database

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

1 个答案:

答案 0 :(得分:9)

因为您没有指定precisionscale这就是为什么它会使值四舍五入。精度表示为值存储的有效位数,刻度表示小数点后可存储的位数。默认情况下,精度值为10,缩放值为0。因此,RETURNS DECIMALRETURNS DECIMAL(10,0)相同。如果比例为0,则 DECIMAL值不包含小数点或小数部分。尝试指定您的功能。

RETURNS DECIMAL(5,2) -- 999.99

<强> DECIMAL, NUMERIC

SQLFiddle Sample