C# 恼人的双重价值
有人能解释为什么变量偏移量返回为0吗? 我需要更新进度条,但该值小于100,所以偏移量是增加当前值的值,然后使用当前的下限值更新进度条,但当它返回0时,它不会更新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
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