Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 5419|回复: 15

[已解决]整型数据的转换

[复制链接]
发表于 2009-9-18 15:17 | 显示全部楼层 |阅读模式

Option Explicit
Dim x As Integer

Sub test1()
    x = 6.5
    MsgBox x
End Sub

Sub test2()
    x = 7.5
    MsgBox x
End Sub

为什么test2()返回8,而不是7?

谢谢!

[em04]
最佳答案
2009-9-18 15:23

自动四舍五入。

至于为什么是8,就是VBA.Round和Worksheetfunction.Round的区别。

两个方法不一样的:当精度的后一位是5,看前一位。

VBA.Round是凑偶数的。

Worksheetfunction.Round没上述限制。

这里四舍五入采用的是VBA.Round

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2009-9-18 15:19 | 显示全部楼层
回复

使用道具 举报

发表于 2009-9-18 15:22 | 显示全部楼层
回复

使用道具 举报

发表于 2009-9-18 15:23 | 显示全部楼层

[em04][em04]

默认类型是整型,你的是7.5,四舍五入啊

回复

使用道具 举报

 楼主| 发表于 2009-9-18 15:23 | 显示全部楼层

QUOTE:
以下是引用雨狐在2009-9-18 15:19:00的发言:
Integer是整型,小数将自动舍入

谢谢雨狐!!

我也只知道要舍入 [em04]

而不知道舍入的标准,比如1楼例子。

回复

使用道具 举报

发表于 2009-9-18 15:23 | 显示全部楼层    本楼为最佳答案   

自动四舍五入。

至于为什么是8,就是VBA.Round和Worksheetfunction.Round的区别。

两个方法不一样的:当精度的后一位是5,看前一位。

VBA.Round是凑偶数的。

Worksheetfunction.Round没上述限制。

这里四舍五入采用的是VBA.Round

回复

使用道具 举报

 楼主| 发表于 2009-9-18 15:25 | 显示全部楼层

QUOTE:
以下是引用lpsh1985在2009-9-18 15:23:00的发言:

[em04][em04]

默认类型是整型,你的是7.5,四舍五入啊

如果是四舍五入,那 .................... test1()为什么返回6,而不是7?

回复

使用道具 举报

发表于 2009-9-18 15:30 | 显示全部楼层

QUOTE:
以下是引用amulee在2009-9-18 15:23:00的发言:

自动四舍五入。

至于为什么是8,就是VBA.Round和Worksheetfunction.Round的区别。

两个方法不一样的:当精度的后一位是5,看前一位。

VBA.Round是凑偶数的。

Worksheetfunction.Round没上述限制。

这里四舍五入采用的是VBA.Round

凑偶数,学习了,真没注意过!

回复

使用道具 举报

 楼主| 发表于 2009-9-18 15:43 | 显示全部楼层

QUOTE:
以下是引用amulee在2009-9-18 15:23:00的发言:

自动四舍五入。

至于为什么是8,就是VBA.Round和Worksheetfunction.Round的区别。

两个方法不一样的:当精度的后一位是5,看前一位。

VBA.Round是凑偶数的。

Worksheetfunction.Round没上述限制。

这里四舍五入采用的是VBA.Round

可是,我这样试了下:

Sub test3()

    Dim x As Integer
   
    x = 7.5
   
    MsgBox x
    MsgBox VBA.Round(x, 0)
    MsgBox Application.WorksheetFunction.Round(x, 0)
   
End Sub

无论x=6.5还是7.5,三句msgbox返回的结果都一样?

回复

使用道具 举报

发表于 2009-9-18 15:51 | 显示全部楼层

对啊

发现了和爱疯同样的问题 为什么 6.5返回6 ,而7.5返回8 

思考中……

Sub test4()

    Dim x As Integer
   
    x = 6.5
   
    MsgBox x
    MsgBox VBA.Round(x, 0)
    MsgBox Application.WorksheetFunction.Round(x, 0)
   
   
       
    x = 7.5
   
    MsgBox x
    MsgBox VBA.Round(x, 0)
    MsgBox Application.WorksheetFunction.Round(x, 0)
End Sub

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-6-3 16:21 , Processed in 0.274184 second(s), 4 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表