技術(shù) 點(diǎn)
- 技術(shù)
- 點(diǎn)
- V幣
- 點(diǎn)
- 積分
- 144573
|
在Access中使用單精度/雙精度數(shù),或使用Access鏈接到Sql server的Float(實(shí)數(shù))都會(huì)存在一個(gè)近似數(shù)的問題,明明是一個(gè)1位或2位小數(shù)的數(shù)值,但表中保存的卻是一大串?dāng)?shù)值。那如何解決這個(gè)問題呢?
單精度/雙精度數(shù)值類型從一開始設(shè)計(jì)的時(shí)候,就不是一個(gè)準(zhǔn)確的數(shù)值類型,他只保證在他這個(gè)數(shù)值類型的精度之內(nèi)是準(zhǔn)確的,精度之外則不保證,比方說,一個(gè)數(shù)值5.1,很可能存儲(chǔ)在單精度/雙精度數(shù)值中的實(shí)際值是5.100000000001或者5.09999999999999。導(dǎo)致這個(gè)現(xiàn)象的原因我們可以通過兩種方式來解釋:
你可以嘗試在任何一個(gè)控件的屬性面板中,設(shè)定他的寬度為:3.2CM,當(dāng)你輸入完畢后,你會(huì)發(fā)現(xiàn)值自動(dòng)變成了3.199cm,無論你怎么改,你都無法輸入3.200CM,因?yàn)閷?shí)際上在電腦中存儲(chǔ)的并不是CM為單位的數(shù)值,而是“緹”為單位的數(shù)值,而“緹”和CM之間的比值,是個(gè)很難被除盡的數(shù),因此你輸入完畢后,電腦自動(dòng)轉(zhuǎn)換成了最接近的“緹”值,然后再轉(zhuǎn)換成厘米顯示到屬性面板上,這一乘一除,兩次四舍五入,誤差就出來了。單精度/雙精度也是類似的原理,其實(shí)在二進(jìn)制存儲(chǔ)的時(shí)候,單精度/雙精度都采用了類似相近分?jǐn)?shù)的方法,而這樣的存儲(chǔ)是不可能做到準(zhǔn)確的。
那在Access中使用單精度/雙精度數(shù)要注意什么呢
1.如果的確要使用單精度/雙精度數(shù),在使用時(shí),可根據(jù)需要使用Round或Format 截取你需要的小數(shù)位數(shù)
2.數(shù)值判斷時(shí)也可使用> < , >=,<= 這樣
3.如果數(shù)字不是非常大,且小數(shù)位數(shù)不多,建議采用貨幣類型(Money) ,或 小數(shù)類型(Decimal)
|
|