#c# #floating-point #progress-bar #double #decimal
#c# #с плавающей запятой #индикатор выполнения #двойное #десятичное
Вопрос:
Хорошо, кто-нибудь может объяснить, почему переменное смещение возвращается как 0? Мне нужно обновить индикатор выполнения, но значение меньше 100, поэтому смещение — это значение для увеличения тока, а затем обновить индикатор выполнения с помощью значения floor текущего значения, но когда он возвращается 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());
Ответ №1:
Вы выполняете целочисленное деление — оба hmm
и 100
являются целыми числами. Поэтому, если hmm
оно больше 100, оно всегда будет давать 0 в качестве результата. Преобразуйте любой операнд в a double
, и он будет использовать арифметику с плавающей запятой. Например:
double offset = 100.0 / hmm;
Ответ №2:
попробуйте использовать
offset = 100./hmm;
Проблема в том, что вы используете целочисленное деление.
Ответ №3:
Вы выполняете целочисленное деление между 100
и hmm
. Результатом всегда будет целое число, и вы видите, что оно выдает 0, потому hmm
что больше, чем 100
в вашем случае.
Попробуйте это вместо:
offset = 100f / hmm; // the trailing f makes 100 a float
Ответ №4:
Проблема заключается в последней строке кода. Если вы напишете 100 / hmm, результат будет рассматриваться как целочисленное значение, поскольку 100 является целым числом. Попробуйте использовать
((double)100)/hmm;
Ответ №5:
Целочисленное деление всегда отбрасывает десятичную точку. Следовательно, что-то вроде 1 / 100
= .01 просто станет 0 .
Ответ №6:
hmm — это целое число. Попробуйте объявить его как значение с плавающей запятой или double или использовать его как таковое при выполнении вычисления.
IE.
offset = 100 / ((double)hmm);