2017-05-08 45 views
0

爲什麼數字取整爲1位仍然會寫入Excel中的許多數字。對變體進行取整

例如:

dim myvar as variant 
dim mysingle as single 
dim myrange as range 

mysingle = 4567.23494376 
myvar = round(mysingle,1) 

myrange = "A1" 
myrange.value = myvar 

即使我寫myvar已四捨五入到一個數字的單元格A1,雖然單元格顯示4567.2,單擊單元格顯示的所有數字的整個價值在公式欄尾部的右側。

我應該期待這種行爲嗎?

+0

是和不是..它取決於https://support.microsoft.com/en-us/help/214118/how-to-correct-rounding-errors-in-floating-point-arithmetic – Slai

+3

此代碼在語法上是錯誤的。 'myrange =「A1」'將不起作用,而'myrange'作爲'Range'作爲'DIM'。由於'Excel'在'Double'精度中使用浮點,所以不應該在VBA中爲'Excel'使用'Single'。 –

+0

是的。當您將單個'4567.2'轉換爲Double(這是Excel使用數字的方式)時,值將是'4567.2001953125',這是您在單元格中看到的內容。你可以這樣看:'Debug.Print myvar,CDbl(myvar)' –

回答

4

嘗試myvar = WorksheetFunction.Round(mysingle, 1)

,而不是myvar = round(mysingle,1)


也請看到@YowE3K

WorksheetFunction.Round總是返回Variant/Double類型的值下面提供的信息,而Round返回一個值與input parameter()類型相同0在這種情況下)。

+2

你可能想編輯答案指出,'WorksheetFunction.Round'總是返回的值鍵入'Variant/Double',而'Round'返回與輸入參數相同類型的值(在這種情況下爲'Single')。 – YowE3K

+0

謝謝YowE3K,我會添加這些信息來給出解釋。 – Mertinc

1

使用單打幾乎總是一個壞主意 - Excel使用雙打 - 轉換單打雙打帶來了麻煩 - 這個代碼工作像您期望的雙,但給你帶一個意想不到的答案,而不涉及回合

Sub roundit() 
Dim myvar As Variant 
Dim myDouble As Double 
Dim mySingle As Single 
myDouble = 4567.23494376 
mySingle = 4567.2 
myvar = Round(myDouble, 1) 

Range("a1").Value = myvar 
Range("a2").Value = mySingle 
End Sub 
+0

謝謝Charles。我以爲我很聰明,用單身來節省記憶。 – farmerandy

相關問題