![]() ![]() ![]() ![]() |
|||||
|
|||||
樓主 JasonJhong ![]()
![]() ![]() |
小弟資料表myTable如下 TM FMfactor 16.97 1.22026 ============================= SELECT TM, 100-TM AS A FROM myTable TM A 16.97 83.0300006866455 為什麼呢? A不是應該為83.03嗎? ============================ SELECT TM ,FMfactor,TM*FMfactor AS C FROM myTable; TM FMfactor C 16.97 1.22026 20.7078113555908 為什麼C計算結果 access是 20.7078113555908 execl 是 20.7078122000000 ACCESS算起來好像怪怪的 謝謝
搜尋相關Tags的文章:
[ 小數點運算 ] ,
本篇文章發表於2015-12-21 10:28 |
1樓 |
這要牽涉到數值精度問題了
您改一下用倍精準的數字重算一下,會有不同的結果 另 ACCESS 當算到取整數時 12.5 取整數時是12 但13.5卻會變成14(奇進偶不進) 而 Excel 卻又是 4捨5入。這些都是數學家搞的鬼 就造成 諾貝爾先生 不頒數學獎的原因了
本篇文章回覆於2015-12-21 20:29
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
2樓 |
如果您對小數位很要求時,千萬不要用 單精 或 倍精
本篇文章回覆於2015-12-21 20:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
3樓 |
單精準數或雙精準數的運算,可能會產生不是預期結果,若要改善這種狀況
在ACCESS的VBA模組,可以加上自寫的FUNCTION,來改善 例如以下簡單FUNCTION程式碼,處理單精準數加減 SELECT TM, 100-TM AS A FROM myTable 就可以改為 SELECT TM, doSubtract(100,TM) AS A FROM myTable 這樣就可以產生預期結果 同理乘法也是可以,只是要自己寫個Function
本篇文章回覆於2015-12-22 09:18
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
4樓 |
Access 的數值四捨五入,並沒有錯
只是它用不是我們一般數學的計算規則 它採用的是的是銀行業的計算規則 進不進位,看要進位的前一位數值 若為偶數則直接捨去,若為奇數才會進位 若是讓 Access 的數值四捨五入 跟我們一般數學的計算規則一樣 可用以下方式解決 <pre lang="vb"> '//整數以下四捨五入 Int(46410*0.05+0.5)=2321 '//12.346 四捨五入至小數點以下一位 Int(12.346*10+0.5)/10=12.3 '//12.346 四捨五入至小數點以下二位 Int(12.346*100+0.5)/100=12.35 '//12.3466 四捨五入至小數點以下三位 Int(12.3466*1000+0.5)/1000=12.357
本篇文章回覆於2016-05-07 15:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
5樓 |
這問題在Access 2.0版時我就打電話去微軟問過,微軟的回答是:「單精數、倍精數小數點本來就不準,小數點要精準請改用貨幣。」
本篇文章回覆於2016-06-01 16:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
6樓 |
to: 羅斯威爾事件
個人覺的回覆你的微軟客服人員,回答的並不算精確 雖然改用貨幣型態可以讓小數點精確但 若欄位本身必須是數字型態,改用貨幣型態,顯示時會有困擾 Access 預設貨幣型態的資料,顯示時會自動加上貨幣符號(如:NT$) 必須把該欄位的控制項"格式"屬性改為"標準" 個人認為 Access 對數字的四捨五入,採用的是的是銀行業的計算規則說法較為正確 銀行業對小數以下的位數的四捨五入,何以要視個位數,單數進位,偶數捨去的作法 個人不是銀行業人員,並不清楚,這個問題或許銀行業的人都無法回答 有可能是早期歐美銀行業的慣例沿習下來的(必竟銀行是從歐美起源)
本篇文章回覆於2016-06-20 15:19
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
回覆 |
如要回應,請先登入. |