日期:2014-05-16  浏览次数:20776 次

MYSQL中float类型奇怪的减法问题
update user set money=money-0.01 where uName='701'

当数据库的money的值为0.01时 无法执行 提示错误如下:
 Out of range value adjusted for column 'money' at row 1

当数据库的money的值为6.01时 执行下例语句就成功
update user set money=money-6.01 where uName='701'



money 字段是float类型 长度为10,保留2位小数,默认0.00;

请高手解答!

------解决方案--------------------
奇怪,在我的电脑上怎么没有这个问题?
请问楼主用的是什么版本的mysql?

------解决方案--------------------


没有出现你所说的问题。

建议你能详细描述你的错误产生步骤,否则别人很难模拟再现你的问题。

SQL code
mysql> desc t_a175460677; 
+-------+-------------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| uName | char(3)  | YES  |  | NULL  |    |
| money | float(10,2) | YES  |  | NULL  |    |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.06 sec)

mysql>
mysql> select * from t_a175460677;
+-------+-------+
| uName | money |
+-------+-------+
| 701  |  0.01 |
| 701  |  6.01 |
+-------+-------+
2 rows in set (0.06 sec)

mysql> update t_a175460677 set money=money-0.01 where uName='701';
Query OK, 2 rows affected (0.06 sec)
Rows matched: 2  Changed: 2  Warnings: 0

mysql> select * from t_a175460677;
+-------+-------+
| uName | money |
+-------+-------+
| 701  |  0.00 |
| 701  |  6.00 |
+-------+-------+
2 rows in set (0.00 sec)

mysql>


[color=#FFFFFF][/color]