20020.html
来自「以电子书的形式收集了VB一些常见问题解决方法,可以很方便的查找自己需要解决的问题」· HTML 代码 · 共 29 行
HTML
29 行
<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 琏琏 on October 12, 1999 at 10:11:14:<p>In Reply to: <a href="20008.html">型态问题!!</a> posted by 小豪 on October 12, 1999 at 05:54:52:<p><center><img src="http://feitsui.hyd.ncku.edu.tw/TLCheng/Basic/logo.gif"></center><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>不要问我为什么... 自己去找数值分析的书! <br><ul><li><a href="http://feitsui.hyd.ncku.edu.tw/TLCheng/Basic/index.htm">培基语言</a></ul><br><hr size=7 width=75%><p><a name="followups">Follow Ups:</a><br><ul><!--insert: 20020--><!--top: 20090--><li><a href="20090.html">Re: 型态问题!!</a> <b>小豪</b> <i>17:13:20 10/13/99</i>(<!--responses: 20090-->0)<ul><!--insert: 20090--></ul><!--end: 20090--></ul><!--end: 20020--><br><hr size=7 width=75%><p></body></html>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?