delimiter //
create function xie1(n1 int,n2 int)
returns float
begin
set @result = pow(n1*n1+n2*n2, 0.5);
return @result;
end//
create function xie2(n1 int,n2 int)
returns double
begin
set @result = pow(n1*n1+n2*n2, 0.5);
return @result;
end//
select xie1(5,6)
union
select xie2(5,6)
//
得到结果为:
+–+
| xie1(5,6) |
+–+
| 7.8102498054504395 |
| 7.810249675906654 |
+–+
2 rows in set (0.00 sec)
问题就是:float只是只有6-7位精度么,怎么返回那么多?另外,在返回的数据中,小数点后第7位的“8”,也是怪怪的,跟返回double类的函数的结果中的”7.81024967…..”也似乎没什么关系。本人的意思是,假如返回float的结果数据中是7.8102496….之类,本人觉得还能理解。
求指导释。
注意:函数内部的计算是一样的,即pow()的计算结果按理是一样的。
create function xie1(n1 int,n2 int)
returns float
begin
set @result = pow(n1*n1+n2*n2, 0.5);
return @result;
end//
create function xie2(n1 int,n2 int)
returns double
begin
set @result = pow(n1*n1+n2*n2, 0.5);
return @result;
end//
select xie1(5,6)
union
select xie2(5,6)
//
得到结果为:
+–+
| xie1(5,6) |
+–+
| 7.8102498054504395 |
| 7.810249675906654 |
+–+
2 rows in set (0.00 sec)
问题就是:float只是只有6-7位精度么,怎么返回那么多?另外,在返回的数据中,小数点后第7位的“8”,也是怪怪的,跟返回double类的函数的结果中的”7.81024967…..”也似乎没什么关系。本人的意思是,假如返回float的结果数据中是7.8102496….之类,本人觉得还能理解。
求指导释。
注意:函数内部的计算是一样的,即pow()的计算结果按理是一样的。
解决方案
40
LZ不做UNION返回是什么结果?
另外可以把POWER去掉。直接用值试试。set @result = 7.810249675906654
估计问题总归是在数据类型转换上。
另外可以把POWER去掉。直接用值试试。set @result = 7.810249675906654
估计问题总归是在数据类型转换上。
40
问题应该是在 create function xie1(n1 int,n2 int) returns float 上,MYSQL估计是不管float 还是 double 都会以 double 返回。导致先截取成FLOAT然后再被转换为 double.
估计 要去分析源代码了。
估计 要去分析源代码了。
20
建议小数要求精度的时候, 还是定义成 decimal 类型比较好控制