gpt4 book ai didi

MySQL 函数 - 奇怪的除法结果?

转载 作者:可可西里 更新时间:2023-11-01 07:05:20 25 4
gpt4 key购买 nike

我在 MySQL 中看到一些与用户创建的函数相关的奇怪行为。我会尽可能简化这一点。

mysql> SELECT 1 / 50

+--------+
| 1/50 |
+--------+
| 0.0200 |
+--------+
1 row in set (0.00 sec)

到目前为止一切顺利。现在我创建一个函数来执行此除法并调用该函数:

mysql> delimiter $$
mysql> create function myd(var decimal) returns decimal language sql deterministic
-> begin
-> declare res decimal;
-> set res = var / 50;
->
-> return res;
-> end
-> $$
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;
mysql> select myd(1);
+--------+
| myd(1) |
+--------+
| 0 |
+--------+
1 row in set (0.00 sec)

很奇怪。好的,让我们尝试其他一些值:

mysql> select myd(10), myd(20), myd(50), myd(70), myd(100);
+---------+---------+---------+---------+----------+
| myd(10) | myd(20) | myd(50) | myd(70) | myd(100) |
+---------+---------+---------+---------+----------+
| 0 | 0 | 1 | 1 | 2 |
+---------+---------+---------+---------+----------+
1 row in set (0.00 sec)

我做了更多的测试 - 但从结果中可以很清楚地看出函数的结果被四舍五入为整数值,尽管函数被声明为 returns decimal。我尝试用 float 替换 decimal 类型,但这并没有改变一点。

那么为什么会发生这种舍入,更重要的是,我该如何防止这种舍入?

最佳答案

如果您没有指定小数的精度,默认情况下它将是 DECIMAL(M,0),即逗号后的 位。

例子:定义为

decimal(10,3) 

逗号后有 3 位数字。

Source

关于MySQL 函数 - 奇怪的除法结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20243479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com