此方法取自Murach的C#2010书籍,并作为检查字符串是否包含小数值的方法示例:
// the new IsDecimal method
public bool IsDecimal(TextBox textBox, string name)
{
//make sure the string only contains numbers and numeric formatting
string s = textBox.Text;
int decimalCount = 0;
bool validDecimal = true;
foreach (char c in s)
{
if (!(
c == '0' || c == '1' || c == '2' || // numeric chars
c == '3' || c == '4' || c == '5' ||
c == '6' || c == '7' || c == '8' ||
c == '9' || c == '.' ||
c == '$' || c == '%' || c == ',' || // formatting chars
c == ' '
))
{
validDecimal = false;
break;
}
if (c == '.')
{
decimalCount++;
}
} // end loop
if (validDecimal && decimalCount <= 1)
{
return true;
}
else
{
MessageBox.Show(name + " must be a decimal number.",
"Entry Error");
textBox.Focus();
return false;
}
}
我的问题是关于if语句和布尔值:
if (validDecimal && decimalCount <= 1)
{
return true;
}
我知道它应该检查两个validDecimal是否从上面的循环返回true并且只有一个小数点存在。我对此很困惑,我对bool的理解是它可以包含两个值:1 = true,0 = false;在这两种情况下,if语句都会得到满足(0小于1且1相等)。我认为正确的if语句看起来像那样:if(validDecimal == true&amp;&amp; decimalCount&lt; = 1)但是因为我是初学者我不确定,这不在勘误表中这本书。
答案 0 :(得分:6)
bool
值本身与value == true
如果你有
bool trueThing = true;
然后以下都是等价的(和真实的)
trueThing;
trueThing == true;
(trueThing == true) == true;
((trueThing == true) == true) == true;
等等。最简单,最简洁的形式是第一种:trueThing。它不是0或1,它是真是假。
答案 1 :(得分:3)
运营商优先权。这样:
if (validDecimal && decimalCount <= 1)
被解释为:
if (validDecimal && (decimalCount <= 1))
不
if ((validDecimal && decimalCount) <= 1)
换句话说,<=
发生在&&
之前。
答案 2 :(得分:1)
我认为你正在阅读这个陈述是错误的,如果你放了括号,那么显而易见的是,它看起来像是
(validDecimal) && (decimalCount <= 1)
不
(validDecimal && decimalCount) <= 1
英文:请检查validDecimal
是true
,decimalCount
最多是1.与true
的比较是隐含的,因为没有必要。
在C#中,bool
类型的变量可以包含两个值true
或false
中的一个,但它们不会作为数字,因此您不能说它们是1和0(尽管它们通常以这种方式实现)。
此外,在大多数语言中,如果您的意思是“a
和b
最多都是x
”,则不能将其写为a && b <= x
。这不是(大多数)计算机语言的工作方式。
答案 3 :(得分:0)
你可以写
if (validDecimal == true && decimalCount <= 1)
但它等同于简写方式
if (validDecimal && decimalCount <= 1)
当类型是bool时无需再次使用
== true
假设
答案 4 :(得分:0)
我真的不知道在c#中,但在Java中,你甚至可以这样做:
boolean b = 1<2;
1<2
为真(请记住,这是一个布尔方程式),因此赋给b
的值为true。你在if中放入的所有内容都被解释为
if(whateverLogicEquationHereIsTrue){do this}
else{means that the boolean input to the if, has come to be false}
现在,这是什么输出?
if(!(1>2)){print "a"}
else{print "b"}
提示:!
是逻辑运算符NOT