简单的c#算术。的WinForms

时间:2010-04-01 02:41:22

标签: c# math

我在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());

所以,如果你有一堆整数,你想要混淆,你必须将每一个转换为双。相当乏味...

3 个答案:

答案 0 :(得分:3)

整数除法丢弃其余部分。您无需使用Convert.ToDoubledouble.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