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

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