простая арифметика с #. WinForms - PullRequest
0 голосов
/ 01 апреля 2010

Я делаю простые деления в 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 ]

3 голосов
/ 01 апреля 2010

Целочисленное деление отбрасывает остаток. Вам не нужно использовать 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);

Надеюсь, это поможет объяснить это.

2 голосов
/ 01 апреля 2010

2 / 3 делит два целых числа, которое усекает любой остаток. Вы могли бы сделать:

double result = 2.0 / 3.0;

Это будет выполнять двойное деление.

double.Parse предназначен для преобразования string в double, а не целое число (для этого вы можете разыграть непосредственно как (double)intVariable или использовать Convert.ToDouble(intVariable)). Если вы хотите использовать константу, просто введите ваши числа в формате 2.0, а не просто 2.

1 голос
/ 01 апреля 2010

Причина, по которой первая строка возвращает 0, заключается в том, что это стандартное поведение для целочисленного деления. Многие языки обрезают остатки, и C # является одним из них.

Причина, по которой ваши вызовы Double.Parse не выполняются, заключается в том, что разбор обычно применяется к строкам. Разбор целочисленного значения не имеет смысла. Вместо этого просто используйте удвоение: (double)2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...