MySQL中与浮点比较有关问题的解决

2016-02-19 14:44 7 1 收藏

下面是个简单易学的MySQL中与浮点比较有关问题的解决教程,图老师小编详细图解介绍包你轻松学会,喜欢的朋友赶紧get起来吧!

【 tulaoshi.com - 编程语言 】

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

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

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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 |
+------+-------+------+

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

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

来源:http://www.tulaoshi.com/n/20160219/1607777.html

延伸阅读
*MySQL(和PHP搭配之最佳组合)中文乱码的原因 MySQL(和PHP搭配之最佳组合)会出现中文乱码的原因不外乎下列几点: -MySQL(和PHP搭配之最佳组合) server本身设定问题,例如还停留在latin1 -MySQL(和PHP搭配之最佳组合) table的语系设定问题(包含character与collation) -客户端程式(例如php)的连线语系设定问题 ...
无法通过mysql proxy连接mysql 在host,password正确的情况下,也会遇到无法连接mysql的情况,可以查查mysql server是不是使用了old_password,检查my.cnf里面是不是有 PLAIN TEXT CODE: 代码如下: old_password = 1 有的数据库是从老版本升级上来的,所以会开启这个选项,mysql proxy不支持old_password。另外也可以通过查看密码长...
根据,MySQL 会自动将数字转化为字符串,反之亦然。 mysql SELECT 1+'1'; - 2 mysql SELECT CONCAT(2,' test'); - '2 test' 若想要将数字明确地转化为字符串,可使用 CAST()或 CONCAT()函数: mysql SELECT 38.8, CAST(38.8 AS CHAR); - 38.8, '38.8' mysql SELECT 38.8, CONCAT...
    问:怎样解决MySQL 5.0.16的乱码问题? 答:MySQL 5.0.16的乱码问题可以用下面的方法解决: 1.设置phpMyAdmin Language:Chinese simplified (zh-utf-8) MySQL 字符集:UTF-8 Unicode (utf8) MySQL 连接校对 gbk_chinese_ci 2.创建数据库时 整理设置成 gbk_chinese_ci 3.用S...
想要马上怀孕抓住N个关键 男女两性的结合将会孕育未来的小生命,而优良的婴儿来自优良的精子和卵子的结合,这就要求夫妇在受孕前的心理和生理必须处于健康状态。可是,恰恰是 在双方都准备好了的情况下,却总是不怀孕。其实怀孕并不像想象中的那么容易!女性想要怀孕,最重要的是要抓住“最容易怀孕的N个关键”,这些包括大家最...

经验教程

770

收藏

70
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部