20090.html
来自「以电子书的形式收集了VB一些常见问题解决方法,可以很方便的查找自己需要解决的问题」· HTML 代码 · 共 23 行
HTML
23 行
<html> <head> <title>Re: 型态问题!!</title> </head> <body bgcolor="#FFFFFF" vlink="#808080"> <center> <h1>Re: 型态问题!!</h1> </center><hr size=7 width=75%><hr size=7 width=75%><p>Posted by <a href="mailto:n8406028@mis.ttit.edu.tw">小豪</a> on October 13, 1999 at 17:13:20:<p>In Reply to: <a href="20020.html">Re: 型态问题!!</a> posted by 琏琏 on October 12, 1999 at 10:11:14:<p>: : 小弟有一大问题!请各位高手帮忙:<p>: : 我程式中有一if判断式如下:<p>: : If x1 >= x2 / 10 then<br>: : 事件一<br>: : Else<br>: : 事件二<br>: : End If<p>: : x1,x2变数之型态皆设为single<br>: : 在执行到这行时,x1之值明明已经等于x2之值 (皆等于 0.03025 )<br>: : 为何程式却去做"事件二"而不做"事件一"<br>: : why?有人说是因为型态的问题!<br>: : 说VB在做完运算后资料型态会改变,真的吗?<br>: : 我这问题又该如何解决?<br>: : 拜托高手帮帮忙!!谢谢!! <p>: x1=x2 时, 你的 x2 不是还除以 10 吗?<br>: => True => 事件一<br>: 若你的意思是<br>: x1=(x2/10)=0.03025 , 那最好先在此行设中断点, 确认即时值 (Shift+F9) 是否 x1=0.03025, x2/10=0.03025 但 (x1 = x2 / 10)? 若是则继续看<br>: --<br>: Dim x1 As Single, x2 As Single<br>: x1 = 0.03025<br>: x2 = 0.3025<br>: Debug.Print (x1 >= (x2 / 10))<br>: --<br>: 传回 False ... 你的问题或许是这个...<br>: 检查此时 x1 , 及 x2/10 在记忆体中的值<br>: Debug.Print VariantToHex(x1), VariantToHex(x2 / 10)<br>: 传回<br>: x1=3CF7CED9, x2/10=3CF7CEDA<br>: 很明显的 x1 < x2/10 <p>: 这个叫做计算机误差或进位误差, 详情请参见数值分析的书, 我国文不好, 不会解释...<br>: 关于 VariantToHex 请参阅培基语言网页<br>: ---<br>: 最后解决方案...<br>: 说法众说纷纭, 我只简单的举一种方法: 提高精度在做判别时再做型别转换!<br>: --<br>: Dim x1 As Double, x2 As Double<br>: x1 = 0.03025<br>: x2 = 0.3025<br>: Debug.Print (csng(x1) >= csng(x2 / 10))<br>: --<br>: 大概就这样!<br>: 不要问我为什么... 自己去找数值分析的书! <p><br>谢谢!!<br>我后来也发现x1值算出来会小于x2值<br>即使在监看式理出现的值是一样的!<br>我用了一个笨方法解决了这个问题!<br>先用 "str()" 转换型态<br>在用 "val()" 转回数值!<br>即 val(str(x1)) 如此有双倍精准,算出来的值就一样了!!<br><br><br><hr size=7 width=75%><p><a name="followups">Follow Ups:</a><br><ul><!--insert: 20090--></ul><!--end: 20090--><br><hr size=7 width=75%><p></body></html>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?