烦人的双重价值

时间:2011-10-21 13:08:35

标签: c# floating-point progress-bar double decimal

好的,有人可以解释为什么varialbe偏移回到0 ??? 我需要更新一个进度条,但是值小于100,所以offset是增加当前值的值,然后用当前的flolated值更新进度条,但是当它返回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 个答案:

答案 0 :(得分:3)

您正在执行整数除法 - hmm100都是整数。因此,如果hmm大于100,则结果总是为0。将任一操作数转换为double,它将使用浮点运算。例如:

double offset = 100.0 / hmm;

答案 1 :(得分:0)

尝试使用

 offset = 100./hmm;

问题是你正在使用整数除法。

答案 2 :(得分:0)

您正在执行100hmm之间的整数除法。结果将始终为整数,并且您看到它生成0,因为在您的情况下hmm大于100

请改为尝试:

offset = 100f / hmm; // the trailing f makes 100 a float

答案 3 :(得分:0)

hmm是一个int。尝试将其声明为float或double,或者在执行计算时将其强制转换。

IE。

offset = 100 / ((double)hmm);

答案 4 :(得分:0)

问题是最后一行代码。如果你写100 / hmm,结果将被视为整数值,因为100是一个整数。尝试使用

((double)100)/hmm;

答案 5 :(得分:0)

整数除法总是降低小数点。因此,像1 / 100 =。01这样的东西只会变为0。