在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)/倍數來處理。