您现在的位置: 软界网资讯中心软件技术数据库MySQL > 资讯显示
行业新闻|互联网|信息安全|软件评测|游戏娱乐|人才新闻|展会信息|软件技术|精英访谈|公司新闻      
快速解决 MySQL中与浮点比较有关的问题
2007-12-1 0:00:00   网友评论       阅读次数 点此评论
  

  注意,下述部分主要与DOUBLE和FLOAT列相关,原因在于浮点数的不准确本质。MySQL使用64位十进制数值的精度执行DECIMAL操作,当处理DECIMAL列时,应能解决大多数常见的不准确问题。

  浮点数有时会导致混淆,这是因为它们无法以准确值保存在计算机体系结构中。你在屏幕上所看到的值通常不是数值的准确值。对于FLOAT和DOUBLE列类型,情况就是如此。DECIMAL列能保存具有准确精度的值,这是因为它们是由字符串表示的。

  在下面的示例中,介绍了使用DOUBLE时的问题:

  mysql> CREATE TABLE t1 (i INT, d1 DOUBLE, d2 DOUBLE);

  mysql> INSERT INTO t1 VALUES (1, 101.40, 21.40), (1, -80.00, 0.00),

  -> (2, 0.00, 0.00), (2, -13.20, 0.00), (2, 59.60, 46.40),

  -> (2, 30.40, 30.40), (3, 37.00, 7.40), (3, -29.60, 0.00),

  -> (4, 60.00, 15.40), (4, -10.60, 0.00), (4, -34.00, 0.00),

  -> (5, 33.00, 0.00), (5, -25.80, 0.00), (5, 0.00, 7.20),

  -> (6, 0.00, 0.00), (6, -51.40, 0.00);

  mysql> SELECT i, SUM(d1) AS a, SUM(d2) AS b

  -> FROM t1 GROUP BY i HAVING a <> b;

  +------+-------+------+

  | i | a | b |

  +------+-------+------+

  | 1 | 21.4 | 21.4 |

  | 2 | 76.8 | 76.8 |

  | 3 | 7.4 | 7.4 |

  | 4 | 15.4 | 15.4 |

  | 5 | 7.2 | 7.2 |

  | 6 | -51.4 | 0 |

  +------+-------+------+

  结果是正确的。尽管前5个记录看上去不应能进行比较测试(a和b的值看上去没有什么不同),但它们能进行比较,这是因为显示的数值间的差异在十分位左右,具体情况取决于计算机的体系结构。

  如果列d1和d2定义为DECIMAL而不是DOUBLE,SELECT查询的结果仅包含1行,即上面显示的最后1行。

      来源: 作者:
【评论查看】
更多关于 MySQL Vista  的新闻
07年十佳IT产品 Windows XP挤掉Vista/图 2007-12-7 0:00:00
XP SP3多数功能借鉴Vista 安装将无需密码 2007-12-6 0:00:00
Vista SP1反盗版有新招 30天不激活就黑屏 2007-12-5 16:35:27
微软:Windows Vista盗版率只相当于XP一半 2007-12-5 16:35:25
微软改变对待盗版Vista策略 态度不再强硬 2007-12-5 16:34:02
      
热点新闻
·《春秋Q传》全新师徒系统即将上线
·Photoshop实例:调出MM清
·CAT开出48亿罚单 华为高层赴泰
·"中国黑客门"调查:被攻击国家三缄
·美"国安小黑屋"曝光:监视全球网民
·还原美丽:Photoshop美女磨
·炫出我的个性!QQ皮肤绘制全程实录
·防QQ密码被盗的十项技巧
·微软否认"Vista可能引起网络性
·Adobe将推在线版免费Photo
热门评论
·惠普连续5个季度压制戴尔 稳居PC
·Photoshop实例:调出MM清
·起价3000元 龙芯电脑首次接受消
·Adobe将推在线版免费Photo
·西门子开展举报行动 已接到部分举报
·微软否认"Vista可能引起网络性
·防QQ密码被盗的十项技巧
·还原美丽:Photoshop美女磨
·赛迪顾问与微软发布中国IT服务产业
·戴尔正酝酿“iPhone杀手” 明