在为科学应用编写函数时,我遇到了问题。我将其追溯到 MySQL 缺乏精确性。
这是官方文档中的页面,该页面声称DECIMAL 的最大位数为 65 - http://dev.mysql.com/doc/refman/5.6/en/fixed-point-types.html。它还描述了如果值超过指定的精度,将如何四舍五入。
这是可重现的代码(一个mysql存储函数)来测试它 -
DELIMITER $$
DROP FUNCTION IF EXISTS test$$
CREATE FUNCTION test
(xx DECIMAL(30,25)
)
RETURNS DECIMAL(30,25)
DETERMINISTIC
BEGIN
DECLARE result DECIMAL(30,25);
SET result = 0.339946499848118887e-4;
RETURN(result);
END$$
DELIMITER ;
如果将上面的代码保存在名为test.sql的文件中,则可以通过在 mysql 提示符下执行以下命令来运行它 -
source test.sql;
select test(0);
它产生输出 -
+-----------------------------+
| test(0) |
+-----------------------------+
| 0.0000339946499848118900000 |
+-----------------------------+
1 row in set (0.00 sec)
如您所见,该数字在第 20 位四舍五入,然后添加五个零以达到所需/指定的精度。那就是作弊。
是我弄错了,还是文档有误?