Раздражающее двойное значение - PullRequest
0 голосов
/ 21 октября 2011

Хорошо, кто-нибудь может объяснить, почему смещение varialbe возвращается как 0 ???Мне нужно обновить индикатор выполнения, но значение меньше 100, поэтому смещение - это значение, на которое увеличивается текущее значение, а затем обновляется индикатор выполнения с текущим значением текущего, но при возврате 0 он не обновляется!

double offset = 0.000001;
int hmm = (image.Height * image.Width);
double current = 0;

MessageBox.Show(offset.ToString());
MessageBox.Show(hmm.ToString());
offset = 100 / hmm;// 0.01;// 100 / (image.Height * image.Width) * 10000;

MessageBox.Show(offset.ToString());

Ответы [ 6 ]

3 голосов
/ 21 октября 2011

Вы выполняете целое деление - и hmm, и 100 являются целыми числами.Поэтому, если hmm больше 100, в результате всегда будет 0.Преобразуйте любой операнд в double, и он будет использовать арифметику с плавающей запятой.Например:

double offset = 100.0 / hmm;
0 голосов
/ 21 октября 2011

Целочисленное деление всегда падает десятичная точка.Следовательно, что-то вроде 1 / 100 = .01 просто станет 0.

0 голосов
/ 21 октября 2011

Проблема в последней строке кода.Если вы напишите 100 / hmm, результат будет выглядеть как целочисленное значение, так как 100 является целым числом.Попробуйте использовать

((double)100)/hmm;
0 голосов
/ 21 октября 2011

хмм является инт.Попробуйте объявить его как число с плавающей запятой или двойное число или использовать его при выполнении вычисления.

0 голосов
/ 21 октября 2011

Вы выполняете целочисленное деление между 100 и hmm.Результатом всегда будет целое число, и вы увидите, что оно выдает 0, потому что hmm больше, чем 100 в вашем случае.

Попробуйте вместо этого:

offset = 100f / hmm; // the trailing f makes 100 a float
0 голосов
/ 21 октября 2011

попробуйте использовать

 offset = 100./hmm;

Проблема в том, что вы используете целочисленное деление.

...