2011-06-13 28 views
1

我正在執行一個導致浮點數的調用。當我嘗試,並將其寫入到一個接入領域,我得到這個錯誤:在Access 2002 VBA中,可以使用哪種數據類型來限制雙重結果的精度?

Run-time error '3759': Scaling of decimal value resulted in data truncation

我故意限制了接入領域的固定精度。我希望這個值會被自動截斷,但是它會拋出這個錯誤 - 我如何明確地改變VBA中的值的精度來避免這個錯誤?

代碼:

value = X/Y 
With myTAble 
    .AddNew 
    !calc = value 
    .Update 
End With 

回答

3

你可以嘗試使用VBA的Round函數,如:

!calc = Round(value, 2) 

與要然而,許多小數更換2。

根據數字的比例和精度,如果Round返回的值無法完全表示爲雙精度浮點數(因此結果小於您請求的小數位數),您可能仍會遇到3759錯誤)。更可靠的方法可能是使用類似的東西:

!calc = CDec(FormatNumber(value, 2)) 

用你想要的無論多少個小數位替換2。

FormatNumber將四捨五入數字並將其轉換爲一個字符串(只有您指定的小數位數),CDec會將該字符串轉換爲Decimal。

+0

我更喜歡這種方法,那麼我的。請注意,在這些情況下,您會得到一個舍入數(不是截斷的)。 – Oneide 2011-06-13 20:14:39

1

如何:

value = X/Y 
With myTAble 
    .AddNew 
    !calc = Fix(value*10^decimalPlaces)/10^decimalPlaces 
    .Update 
End With 

哪裏decimalPlaces是你想用的小數位的數量。

Fix截斷數字。如果您希望某種舍入,請嘗試Clng

+0

'Val'接受一個字符串並將其轉換爲數字,如果不能,則返回零。 – pyon 2011-06-13 18:27:38

+0

@Eduardo:你說得對。我測試過'?瓦爾(9.87)'在直接窗口,它只是'9'返回。但它似乎是一種不正當行爲。我會糾正我的答案。謝謝。 – Oneide 2011-06-13 20:04:26

+1

'Val'接受一個字符串並輸出一個數字。如果你想獲得'9.87',你應該使用'?瓦爾( 「9.87」)'。 – pyon 2011-06-13 21:34:32

相關問題