已知订单费率order_fee在数据库中是5,字段类型为double
设置变量 @ooo : = select order_fee;
A:SELECT -round(-50 * ( 5 / 100), 0); —这是我们预想中的计算结果
B:SELECT -round(-50 * (@ooo / 100), 0);
计算得出值是-2.5
前者向上取整是-3
后者向下取整是-2
正常而言,我们所需的是以前者计算结果为主,而后者看着跟前者类似,但计算结果却不一样呢
经排查发现,可能是mysql在获取double类型数据进行计算的时候,会跟以文本类型数据进行计算一样,
这样会导致通过mysql函数计算出来的结果与实际数字类型的计算产生冲突,就比如B语句再通过查询获值后就变成了
SELECT -round(-50 * ( ‘5’ / 100), 0);
这样算出来就变成-2了,因此以后涉及到这些费率的字段设计,尽量以decimal作为字段类型,又或者说将计算的逻辑交给代码,
而不是交给mysql处理,防止再出现类似的计算冲突