当前位置:  开发笔记 > 后端 > 正文

在Visual Basic 6.0中自动类型转换

如何解决《在VisualBasic6.0中自动类型转换》经验,为你挑选了2个好方法。

当我们在Visual Basic 6.0中将float转换为整数时,它如何使小数部分变圆?我正在谈论自动类型转换.

如果我们分配喜欢

Dim i as Integer
i=5.5
msgbox i

它会打印什么?5或6 ??

几个月前我得到了"5".有一天它开始给我6个!任何想法都错了吗?微软是否发布了一些补丁来解决问题?

更新:5.5转换为6但8.5到8!

更新2:添加CInt没有任何区别.CInt(5.5)给出6,而Cint(8.5)得到8!有点喜欢的行为.我应该尝试像地板(x + 0.49);



1> elo80ka..:

更新:在一些谷歌搜索后,我发现了以下文章:

它不是一个"bug",它是VB设计工作的方式.它使用一种称为银行家舍入的东西,如果数字正好以5结尾并且你想要绕到5前面的位置,那么如果5位置前面的数字是偶数则向下舍入数字,否则向上舍入.它应该使用四舍五入的数字来防止重复计算,这样答案并不总是偏向上.有关此问题的更多信息,请参阅此链接

http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q196652

这解释了(明显的)奇怪的行为:

Cint(5.5) 'Should be 6'
Cint(8.5) 'Should be 8'

旧更新: 也许您应该更明确:使用CInt,而不是简单地将浮点数赋给整数.例如:

Dim i as Integer
i = CInt(5.5)
MsgBox i



2> MarkJ..:

部分内容在VB6帮助中:主题类型转换函数.不幸的是,这是MSDN网站上的VB6文档中没有的主题之一,但是如果你已经安装了VB6的帮助,它就会在那里.

当小数部分恰好为0.5时,CIntCLng总是将其四舍五入到最接近的偶数.例如,0.5 轮到0,1.5轮到 2. CIntCLngFixInt函数不同,它们截断而不是舍入数字的小数部分.此外,FixInt始终返回与传入的类型相同的值.

隐式类型强制 - 又名"邪恶类型强制(PDF)" - 从浮点数到整数使用与CIntCLng相同的舍入规则.在手册中的任何位置似乎都没有记录此行为.

如果你想在小数部分> = 0.5时向上舍入,否则向下舍入,一个简单的方法就是

 n = Int(x + 0.5)

和关闭的顶部我的头,这是我的迈克Spross的简短的版本RoundNumber :)这对于VB6 Round函数的替代品.

 'Written off the top of my head, seems to work. 
Public Function RoundNumber(ByVal value As Double, Optional PlacesAfterDecimal As Integer = 0) As Double
  Dim nMultiplier As Long
  nMultiplier = 10 ^ PlacesAfterDecimal
  RoundNumber = Int(0.5 + value / nMultiplier) * CDbl(nMultiplier)
End Function

样本输出:

Debug.Print RoundNumber(1.6)       '2'
Debug.Print RoundNumber(-4.8)      '-5'
Debug.Print RoundNumber(101.7)     '102'
Debug.Print RoundNumber(12.535, 2) '12.54'

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有