如果不更改字段类型,那么就转化类型进行比较 SELECT * FROM t WHERE (TRUNCATE(a,2)-TRUNCATE(b,2)-TRUNCATE(c,2))=0
本来 DECIMAL 类型就是为这个而设的 你非要说他不准确,能有什么办法
数据字段值转化int类型处理 换下其他mysql函数如cast……
SELECT * FROM payment_index_tbl WHERE ( cast(amount*100 as signed )-cast(third_total_fee*100 as signed )-cast(third_service_fee*100 as signed ) )=0 这样好像可以 我再试一下
你完全可以使用整型的,不就是人工点的小数点吗?
你非要说他不准确,能有什么办法
这样好像可以 我再试一下
你可以测试一下以下语句是返回1还是0 。
select (0.03-0.02-0.01) = 0;
MySQL 支持所有的 ANSI/ISO SQL92 数字类型。这些类型包括准确数字的数据类型(NUMERIC、DECIMAL、INTEGER 和 SMALLINT),也包括近似数字的数据类型(FLOAT、REAL和 DOUBLE PRECISION)。关键词 INT 是 INTEGER 的同义词,关键词 DEC 是 DECIMAL 的同义词。 NUMERIC 和 DECIMAL 类型被 MySQL 以同样的类型实现,这在 SQL92 标准中是允许的。他们用于保存对准确精度有重要要求的值,例如与金钱有关的数据。当以它们中的之一声明一个列时,精度和数值范围可以(通常是)被指定;例如: salary DECIMAL(5,2)在这个例子中,5 (精度(precision)) 代表重要的十进制数字的数目,2 (数据范围(scale)) 代表在小数点后的数字位数。在这种情况下,因此,salary 列可以存储的值范围是从 -99.99 到 99.99。(实际上 MySQL 在这个列中可以存储的数值可以一直到 999.99,因为它没有存储正数的符号)。 译者注: M 与D 对DECIMAL(M, D) 取值范围的影响类型说明 取值范围(MySQL < 3.23) 取值范围(MySQL >= 3.23)
DECIMAL(4, 1) -9.9 到 99.9 -999.9 到 9999.9
DECIMAL(5, 1) -99.9 到 999.9 -9999.9 到 99999.9
DECIMAL(6, 1) -999.9 到 9999.9 -99999.9 到 999999.9
DECIMAL(6, 2) -99.99 到 999.99 -9999.99 到 99999.99
DECIMAL(6, 3) -9.999 到 99.999 -999.999 到 9999.999# 在MySQL 3.23 及以后的版本中,DECIMAL(M, D) 的取值范围等于早期版本中的DECIMAL(M + 2, D) 的取值范围。注释结束: 在 ANSI/ISO SQL92 中,句法 DECIMAL(p) 等价于 DECIMAL(p,0)。同样的,在执行被允许决定值 p 的地方,句法 DECIMAL 等价于 DECIMAL(p,0)。MySQL 目前还不支持 DECIMAL/NUMERIC 数据类型的这些变体形式中的任一种。一般来说这并不是一个严重的问题,通过明确地控制精度和数值范围可以得到这些类型的主要功能益处。 DECIMAL 和 NUMERIC 值是作为字符串存储的,而不是作为二进制浮点数,以便保护这些值的十进制精确度。一个字符用于数值的每一位、小数点(如果 scale > 0) 和 “-” 符号(对于负值)。如果 scale 是 0,DECIMAL 和 NUMERIC 值不包含小数点或小数部分。 DECIMAL 和 NUMERIC 值的最大范围与 DOUBLE 一致,但是对于一个给定的 DECIMAL 或 NUMERIC 列,它的实际范围可制定该列时的 precision 或 scale 限制。当这样的列被赋给了小数点的位数超过 scale 所指定的值时,该将根据 scale 进行四舍五入。当一个 DECIMAL 或 NUMERIC 列被赋与一个大小超过指定(或缺省)的 precision and scale 的限止范围时,MySQL 以该列范围的端点值存储该值。