Access中单精度类型运算过程中精度误差问题及处理

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)/倍数来处理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章