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

司马天德

司马天德

2016-02-19 14:44

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

注意,下述部分主要与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的值看上去没有什么不同),但它们能进行比较,这是因为显示的数值间的差异在十分位左右,具体情况取决于计算机的体系结构。

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

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

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

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

编程语言 网络编程
MySQL中与浮点比较有关问题的解决

解决MySQL数据库中与优化器有关的问题

编程语言 网络编程
解决MySQL数据库中与优化器有关的问题

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

发现mysql一个用法比较有用

编程语言 网络编程
发现mysql一个用法比较有用

mysql中文问题的解决

编程语言 网络编程
mysql中文问题的解决

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

与“他”有关的妇科问题

婆媳关系 孕前
与“他”有关的妇科问题

Navicat for MySQL与MySQL GUI Tools功能比较

编程语言 网络编程
Navicat for MySQL与MySQL GUI Tools功能比较

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

脱掉华丽的外套看win7的本质

脱掉华丽的外套看win7的本质

Ubuntu无法安装vim怎么办?

Ubuntu无法安装vim怎么办?
下拉加载更多内容 ↓