一个让人百思不得其解的结果

桃花岛黄岛主 2012-07-03 08:18:31



---MYSQL 的结果

select TRUNCATE(275600/11440000*-220000,-2), 275600/11440000*-220000

---------------------------------------------
-5200 -5300.0000


----我需要的结果
select TRUNCATE(275600/11440000*-220000,-2), 275600/11440000*-220000

---------------------------------------------
-5300 -5300.0000



----ORACLE中的结果


select TRUNC(275600/11440000*-220000,-2), 275600/11440000*-220000 from dual;

---------------------------------------------
-5300 -5300






谁能帮我解释一下,或帮我解决一下这个问题
...全文
153 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
rucypli 2012-07-03
  • 打赏
  • 举报
回复
那你就逐步简化表达式 看看到底哪个地方是有差别的
WWWWA 2012-07-03
  • 打赏
  • 举报
回复
ORACLE 与MYSQL本来就有差别,看看费用就知道了
桃花岛黄岛主 2012-07-03
  • 打赏
  • 举报
回复
我的所有的业务是保证 ORACLE 与MYSQL的计算结果保持一致,但是这个值变成了一个例外,同样的表达式,不同的数据库出现不同的结果
桃花岛黄岛主 2012-07-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
MYSQL 中的TRUNCATE是截取,它的实现更符合TRUNCATE这个词的含义。 -3.5 截取后是 -3
而ORACLE的程序员显然用了向下取整。
[/Quote]

钻石大神,,,,,,我的目的是TRUNCATE,ORACLE中的TRUNC也是截取的意思,ORACLE也有ROUND进行四舍五入,
-3.5 截取后是 -3 ORACLE中TRUNC(-3.5) 也是-3


ACMAIN_CHM 2012-07-03
  • 打赏
  • 举报
回复
mysql> select round(275600/11440000*-220000,-2);
+-----------------------------------+
| round(275600/11440000*-220000,-2) |
+-----------------------------------+
| -5300 |
+-----------------------------------+
1 row in set (0.00 sec)

mysql>
ACMAIN_CHM 2012-07-03
  • 打赏
  • 举报
回复
MYSQL 中的TRUNCATE是截取,它的实现更符合TRUNCATE这个词的含义。 -3.5 截取后是 -3
而ORACLE的程序员显然用了向下取整。

WWWWA 2012-07-03
  • 打赏
  • 举报
回复
SELECT TRUNCATE(ROUND(275600/11440000*-220000,0),-2)
-5300
WWWWA 2012-07-03
  • 打赏
  • 举报
回复
select ROUND(275600/11440000*-220000,10)
-5299.9999800000

返回被舍去至小数点后D位的数字X。若D 的值为 0, 则结果不带有小数点或不带有小数部分。可以将D设为负数,若要截去(归零) X小数点左起第D位开始后面所有低位的值.
select TRUNCATE(275600/11440000*-220000,5)
-5200

select 275600/11440000*-220000
-5300

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧