实际产品单价为3.6,数量为15,折扣为0.15
我想知道的是为什么有这种错误,我直接乘0.85,数据没错,如果用数据库数据就有问题。为什么这样
因为在计算机的底层是二进制
我们平时在电脑里做的十进制是先转换成为对应的二进制放在内存里再根据编码规则和算法规则进行计算的
但是电脑在处理数据时的内存是有限长度的,比如我们常说的CPU32位或64位即CPU一次能处理的字长长度,或者我们在数据库建表时设置的float数据类型设置他为N位长度
在运算的某些地方如果超出了计算机的内存长度(即常说的溢出),计算就会截断最右保留最左位数的值。
这样计算结果就会出现误差。
遇到这种情况,一般设定字符或单元格的精度类型就可以了。
外面包一层 cast(数量*XX as int)
round(订单明细.单价*订单明细.数量*(1-订单明细.折扣),2) as 销售金额,这样就保留两位小数了
你查一下这些字段的数据类型,应该是浮点型float、double,这些数据类型在计算的时候都会有精度误差,
如果想要准确的小数计算,建议定义成decimal类型