【问题标题】:Annoying double value烦人的双重价值
【发布时间】:2011-10-21 13:08:35
【问题描述】:
好的,任何人都可以解释为什么变量偏移量返回为 0 吗?
我需要更新一个进度条,但值小于 100,所以 offset 是增加 current 的值,然后用 current 的下限值更新进度条,但当它返回 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());
【问题讨论】:
标签:
c#
floating-point
progress-bar
double
decimal
【解决方案1】:
您正在执行 integer 除法 - hmm 和 100 都是整数。因此,如果hmm 大于 100,它将始终给出 0 作为结果。将任一操作数转换为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 是一个整数。尝试将其声明为浮点数或双精度数,或者在执行计算时将其强制转换。
IE。
offset = 100 / ((double)hmm);