2014-11-01 56 views
-2
之间的区别

我在窗口中运行该SQL &的Linux版本的MySQL,并得到了不同的结果:MySQL的算术计算结果的Windows和Linux

select (((((237803.3300+1659482.4400)/2.00)/1182208.5700)*30.00*6)+ 
(0.50*`(((((((1159248.2000+687984.6000)/2.00)/1527268.4000)*30.00*6)+ 
((((457300.0000+1707654.0300)/2.00)/1182208.5700)*30.00*6))  
-(((((360.00*((1527268.4000-1182208.5700)-((2587.0000-((5354427.3100*0.0400*6)/12.00)) 
+99354.4800+10550.5600)))/((((((1159248.2000+687984.6000)/2.00)/1527268.4000)*30.00*6)+ 
((((457300.0000+1707654.0300)/2.00)/1182208.5700)*30.00*6))*0.5))-(0.50*((2587.0000- 
((5354427.3100*0.0400*6)/12.00))+99354.4800+10550.5600)))* 
(((((1159248.2000+687984.6000)/2.00)/1527268.4000)*30.00*6)+ 
((((457300.0000+1707654.0300)/2.00)/1182208.5700)*30.00*6)))/1182208.5700))- 
((((237803.3300+1659482.4400)/2.00)/1182208.5700)*30.00*6)))) AS YF` 

的Windows版本的MySQL结果:105.93639914104807268662689486

的Linux版本的mysql结果:144.43789669025999363208811782

而我一直在检查这个表达式在其他一些平台如java,excel中,获得约值:105.93 .....,所以我想到了th在linux上计算mysql是不正确还是一些mysql变量设置不正确?有人可以告诉我为什么吗?

我的MySQL的Linux版本(在云服务器):

mysql>SHOW VARIABLES LIKE "%version%" 

+-------------------------+---------------------------------+ 
| Variable_name   | Value       | 
+-------------------------+---------------------------------+ 
| innodb_version   | 1.1.8-20.1      | 
| protocol_version  | 10        | 
| slave_type_conversions |         | 
| version     | 5.5.18.1-Alibaba-rds-201406-log | 
| version_comment   | Source distribution    | 
| version_compile_machine | x86_64       | 
| version_compile_os  | Linux       | 
+-------------------------+---------------------------------+ 
+0

舍入错误,也写愚蠢的代码。 – 2014-11-01 08:01:07

+1

如果它是舍入错误,它会变得太过分(144.44 - 105.94 = 38.5)。 – 2014-11-01 10:48:08

+1

这是一个(可笑)长的公式,它们确实建立起来 – 2014-11-01 10:49:01

回答

-2

我没仔细看,但你不选择FROM任何地方

试试这个:

select (((((237803.3300+1659482.4400)/2.00)/1182208.5700)*30.00*6)+(0.50*(((((((1159248.2000+687984.6000)/2.00)/1527268.4000)*30.00*6)+((((457300.0000+1707654.0300)/2.00)/1182208.5700)*30.00*6))-(((((360.00*((1527268.4000-1182208.5700)-((2587.0000-((5354427.3100*0.0400*6)/12.00))+99354.4800+10550.5600)))/((((((1159248.2000+687984.6000)/2.00)/1527268.4000)*30.00*6)+((((457300.0000+1707654.0300)/2.00)/1182208.5700)*30.00*6))*0.5))-(0.50*((2587.0000-((5354427.3100*0.0400*6)/12.00))+99354.4800+10550.5600)))*(((((1159248.2000+687984.6000)/2.00)/1527268.4000)*30.00*6)+((((457300.0000+1707654.0300)/2.00)/1182208.5700)*30.00*6)))/1182208.5700))-((((237803.3300+1659482.4400)/2.00)/1182208.5700)*30.00*6)))) AS YF 
FROM DUAL 

Answer: 105.936399141048

小提琴:http://sqlfiddle.com/#!2/a2581/32503/0

+1

您不需要'FROM'来进行计算。没有表是必需的 – 2014-11-01 08:03:08

+0

嗯,不知道...你总是需要从Oracle中选择一些东西......我不经常使用MySQL。这就是为什么有一个DUAL表格。 – Andrew 2014-11-01 08:04:44

+0

我相信这在Oracle中也是如此,在这种情况下,您不需要from子句 – 2014-11-01 08:05:30