MySQL的Double字段计算后的结果不对

wzzwwz 2009-09-26 04:30:29

这是为什么?
mysql版本号是 5.1.32-community
计算结果的错误是在自己程序中发现的,用MySQL控制台模拟了一下操作,还是如此。
请教大家,这是什么原因造成的?谢谢~

use test;
drop table if exists test999;
create table test999 (f1 double);
insert into test999(f1)values(0.999999999999886);
select f1 - 1 from test999;
select 0.999999999999886-1 from test999;

运行结果:
mysql> select f1 - 1 from test999;
+---------------------+
| f1 - 1 |
+---------------------+
| -1.14019904629e-013 |
+---------------------+

mysql> select 0.999999999999886-1 from test999;
+---------------------+
| 0.999999999999886-1 |
+---------------------+
| -0.000000000000114 |
+---------------------+
...全文
344 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzzwwz 2009-09-26
  • 打赏
  • 举报
回复
嗯。多谢了,我去好好研究下
柯本 2009-09-26
  • 打赏
  • 举报
回复
1.浮点运算误差引起
2.输出格式的关系,好像在my.ini中可以改,具体查一下mysql手册

wzzwwz 2009-09-26
  • 打赏
  • 举报
回复

嗯。谢谢你提的解决方案。
不过还想多麻烦一下,为什么两个应该同样的结果却不一样?
柯本 2009-09-26
  • 打赏
  • 举报
回复
如果你想要得到要求的输出,可用
select cast(f1-1 as DECIMAL(16,15)) from test999;
柯本 2009-09-26
  • 打赏
  • 举报
回复
浮点运算误差,很正常,一般语言中也如此

2,498

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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