varchar字段之间的MySQL减法返回十进制,精度太高

时间:2014-01-19 18:41:24

标签: mysql decimal precision varchar

以下减法查询在小数点后返回太多数字。

mysql> select AA, BB, AA - BB, AA - 23.057,  22.659 - 23.057 from table1 where TID = '1';
+----------+----------+---------------------+---------------------+-----------------+
| AA       | BB       | AA - BB             | AA - 23.057         | 22.659 - 23.057 |
+----------+----------+---------------------+---------------------+-----------------+
| 22.659   | 23.057   | -0.3979999999999997 | -0.3979999999999997 |          -0.398 |
+----------+----------+---------------------+---------------------+-----------------+
1 row in set (0.00 sec)
mysql>

我希望我可以使用十进制字段,但是用户希望保持他在输入时间在AA和BB列中插入的精度,这就是VARCHAR用于那些列的原因。

e.g.:  11.10 - 11.22 = - 0.02
       11.20 - 11.10 = + 0.10
       22.659 - 23.057 = -0.398
       23.659 - 22.559 = 0.100

while  23.659 - 22.559 = 0.1 is wrong

任何帮助都会非常感激。 感谢

1 个答案:

答案 0 :(得分:1)

您可以使用format()功能:

select format(col1 - col2, length(substring_index(col1, '.', -1)))

如果您不喜欢较大数字的逗号:

select replace(format(col1 - col2, length(substring_index(col1, '.', -1))), ',', '')