2017-05-08 47 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

相关问题