Vb.net VB案例条件为真,但未执行操作
我已经编写了以下VB代码Vb.net VB案例条件为真,但未执行操作,vb.net,select-case,Vb.net,Select Case,我已经编写了以下VB代码 Dim qu1、qu2、facroredload、bx、迭代、q3、错误为双精度 bx=0.1 qu1=“常数” 对于迭代次数=0到10000 qu2=“常数”*bx q3=qu1+qu2 facroredload=“常量”/bx^2 err=Math.Abs(第三季度-facroredload) 选择大小写错误 案例>10 bx+=0.1 案例错误1 bx=bx+0.01 案例错误0.1 bx=bx+0.001 案例错误0.01 bx=bx+0.0001 案例误差=1
Dim qu1、qu2、facroredload、bx、迭代、q3、错误为双精度
bx=0.1
qu1=“常数”
对于迭代次数=0到10000
qu2=“常数”*bx
q3=qu1+qu2
facroredload=“常量”/bx^2
err=Math.Abs(第三季度-facroredload)
选择大小写错误
案例>10
bx+=0.1
案例错误1
bx=bx+0.01
案例错误0.1
bx=bx+0.001
案例错误0.01
bx=bx+0.0001
案例误差<0.01
退出
结束选择
下一个
bx
值达到1.7000000004(我不知道为什么代码添加了太多的小数),然后它永远不会改变。For
语句仍然令人兴奋,但是bx从未超过1.7,即使Case err 1
是真的。VB的Select Case
确实只是一个奇特的if语句。每个Case
如何转换为if表达式取决于Case表达式的格式。有三种选择:
- 范围语句,如
。如果err>=1且err开始您的第一个案例1到10
案例,则转换为
。使用此语法时,它只是在case表达式之前插入测试表达式,如
If err>10
- 不是范围且不以比较运算符开头的语句,例如第二个
。这种情况的处理方式与比较运算符的情况完全相同,其中比较运算符暗示为案例
。这意味着如果err=(err 1),您的第二个=
案例将被视为
案例
陈述不适合你。如果err
为1.7,则第二个case语句归结为如果err=True
,但err不是True,它是一个介于1和10之间的数字
要修复代码,您有两个选项。最简单的解决方案是:
Select Case err
Case > 10
bx += 0.1
Case > 1
bx = bx + 0.01
Case > 0.1
bx = bx + 0.001
Case > 0.01
bx = bx + 0.0001
Case Else
Exit For
End Select
如果满足多个
Case
,则只执行第一个满足的子句,就像If/ElseIf
一样。这就是为什么上面的代码可以工作,即使它只指定了每个范围的下限。如果您不喜欢隐含的上限,可以这样添加它:Case>1和errerr
isDouble
<代码>错误0.1
是布尔值
。你无法比较它们。将选项严格打开
。或者,使用Select Case True
而不是Select Case err
。启用选项Strict。一开始它可能会让人恼火,但它会帮助你避免这种错误,在一个月内你会想没有它你会怎么做。而且。。。对于“为什么小数太多”问题,请记住0.1
是1/10
的十进制表示,而计算机将以二进制形式存储它。在二进制中,1/10
是一个重复值,与十进制中的1/3
类似。精确存储是不可能的,所以每当你使用它时,就会出现一些小的舍入错误。哦,那么,当十进制数与字符串相乘时,你希望计算机做什么呢?这完全没有道理。