7

この単純な関数を作成したところ、結果は 0.5 ではなく 1 を返しました。

私は何を間違えましたか?

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

precisionandを指定しなかったためscale、値を丸めています。精度は値に格納される有効桁数を表し、位取りは小数点以下に格納できる桁数を表します。デフォルトでは、精度10の値は で、位取りの値は です0。はRETURNS DECIMALと同じRETURNS DECIMAL(10,0)です。位取りが 0 の場合、DECIMAL 値には小数点または小数部が含まれません。関数に in を指定してみてください。

RETURNS DECIMAL(5,2) -- 999.99

10 進数、数値

SQLFiddle サンプル

于 2012-09-13T00:36:06.720 に答える