在Access中单精度类型在运算过程中会有产生精度误差,比如,一个双精度乘于一个单精度的值四舍五入保留为两位小数的双精度会有精度问题。
求KCMJ: KCMJ=TBMJ*KCXS,并将KCMJ四舍五入保留两位小数。
其中TBMJ、KCMJ为双进度数字类型,KCXS为单精度数字类型。
使用sql语句update DLTB set KCMJ = round(TBMJ * KCXS ,2)
这个数并不是四舍五入的结果,相差了0.01:
这是因为KCXS的单精度类型导致的,将其转为双精度可以看到后面还有浮点小数:
尝试以下的办法都失败:
1. round(KCXS,4)
2.(KCXS*100+0.5)/100
解决办法:
因为KCXS是4位小数,所以将其*10000并约束为保留0位小数后再/10000
成功,再回来测试之前的式子:
总结:
在Access中单精度类型在运算过程中会有产生精度误差,可以通过round(@num*倍数,0)/倍数来处理。