C# 恼人的双重价值

C# 恼人的双重价值,c#,floating-point,progress-bar,double,decimal,C#,Floating Point,Progress Bar,Double,Decimal,有人能解释为什么变量偏移量返回为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

有人能解释为什么变量偏移量返回为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());
您正在执行整数除法,
hmm
100
都是整数。因此,如果
hmm
大于100,它将始终给出0作为结果。将任一操作数转换为双精度,它将使用浮点运算。例如:

double offset = 100.0 / hmm;
您正在执行整数除法,
hmm
100
都是整数。因此,如果
hmm
大于100,它将始终给出0作为结果。将任一操作数转换为双精度,它将使用浮点运算。例如:

double offset = 100.0 / hmm;
试用

 offset = 100./hmm;
问题是您正在使用整数除法。

尝试使用整数除法

 offset = 100./hmm;

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

您正在执行
100
hmm
之间的整数除法。结果总是一个整数,您看到它产生0,因为在您的例子中,
hmm
大于
100

请尝试以下方法:

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

您正在执行
100
hmm
之间的整数除法。结果总是一个整数,您看到它产生0,因为在您的例子中,
hmm
大于
100

请尝试以下方法:

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

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


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


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

((double)100)/hmm;

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

((double)100)/hmm;
整数除法总是删除小数点。因此,类似于
1/100
=.01的值将变为0。

整数除法总是删除小数点。因此,类似于
1/100
=.01的值将变成0