vb6 – Visual Basic 6.0中的自动类型转换

vb6 – Visual Basic 6.0中的自动类型转换,第1张

概述当我们在Visual Basic 6.0中将float转换为整数时,它如何使小数部分变圆?我正在谈论自动类型转换. 如果我们分配喜欢 Dim i as Integeri=5.5msgbox i 它会打印什么? 5或6 ?? 几个月前我得到了“5”.有一天它开始给我6个! 任何想法都错了吗?微软是否发布了一些补丁来解决问题? 更新:5.5转换为6但8.5到8! 更新2:添加CInt没有任何区别. 当我们在Visual Basic 6.0中将float转换为整数时,它如何使小数部分变圆?我正在谈论自动类型转换.

如果我们分配喜欢

Dim i as Integeri=5.5msgBox i

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

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

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

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

解决方法 部分内容在VB6帮助中:主题类型转换函数.不幸的是,它是MSDN网站上 VB6 documentation以外的主题之一,但是如果你已经安装了VB6的帮助,它就会在那里.

When the fractional part is exactly 0.5,CInt and CLng always round it to the nearest even number. For example,0.5 rounds to 0,and 1.5 rounds to 2. CInt and CLng differ from the Fix and Int functions,which truncate,rather than round,the fractional part of a number. Also,Fix and Int always return a value of the same type as is passed in.

隐式类型强制 – a.k.a. “evil type coercion (PDF)” – 从浮点数到整数使用与CInt和CLng相同的舍入规则.在手册中的任何位置似乎都没有记录此行为.

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

n = Int(x + 0.5)

在我的脑海中,这是Mike 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'
总结

以上是内存溢出为你收集整理的vb6 – Visual Basic 6.0中的自动类型转换全部内容,希望文章能够帮你解决vb6 – Visual Basic 6.0中的自动类型转换所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1247699.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存