我在c#中做了简单的划分,我对它的错综复杂感到有点困惑。这是一些代码,在评论中,结果。 (顺便说一句,我只编译1行没有注释,如果你说我有5个相同变量的声明)
double result = 2 / 3; //gives 0
double result = Convert.ToDouble(2) / Convert.ToDouble(3); // is good
double result = double.Parse(2) / double.Parse(3); // gives me errors
double result = double.Parse(2 / 3); // gives me errors
double result = Convert.ToDouble(2 / 3); // gives 0
MessageBox.Show(result.ToString());
所以,如果你有一堆整数,你想要混淆,你必须将每一个转换为双。相当乏味...
答案 0 :(得分:3)
整数除法丢弃其余部分。您无需使用Convert.ToDouble
或double.Parse
,只需编写:
double result = 2.0 / 3;
或
double result = (double)2 / 3;
如果其中一个操作数是浮点值,那么你得到浮点算术而不是整数算术。
解释每一个:
// 2 / 3 = 0 with a remainder of 2; remainder is discarded
double result = 2 / 3;
// 2.0 / 3.0 = 0.6667, as expected
double result = Convert.ToDouble(2) / Convert.ToDouble(3);
// double.Parse takes a string parameter, so this gives a syntax error
double result = double.Parse(2) / double.Parse(3);
// As above, double.Parse takes a string, so syntax error
// This also does integer arithmetic inside the parentheses, so you would still
// have zero as the result anyway.
double result = double.Parse(2 / 3); // gives me errors
// Here, the integer division 2 / 3 is calculated to be 0 (throw away the
// remainder), and *then* converted to a double, so you still get zero.
double result = Convert.ToDouble(2 / 3);
希望有助于解释它。
答案 1 :(得分:2)
2 / 3
正在划分两个整数,它会截断任何余数。你可以这样做:
double result = 2.0 / 3.0;
那将进行双重划分。
double.Parse
旨在将string
转换为double
,而不是整数(您可以直接转换为(double)intVariable
或使用Convert.ToDouble(intVariable)
) 。如果您想使用常量,只需将数字设置为2.0
而不仅仅是2
。
答案 2 :(得分:1)
第一行返回0的原因是这是整数除法的标准行为。许多语言会截断余数,而C#就是其中之一。
Double.Parse调用失败的原因是因为解析通常应用于字符串。解析整数值并没有多大意义。只需转换为加倍:(double)2
。