烦人的双值

问题描述 投票:0回答:6

确定,为什么偏移量变回0?我需要更新进度条,但该值小于100,所以offset是增加当前值的值,然后使用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
6个回答
3
投票

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

double offset = 100.0 / hmm;

0
投票

尝试使用

 offset = 100./hmm;

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


0
投票

您正在执行100hmm之间的整数除法。结果将始终是整数,并且由于hmm大于100,因此您会看到它产生0。

尝试以下方法:

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

0
投票

问题是代码的最后一行。如果您输入100 / hmm,则结果将被视为整数值,因为100是整数。尝试使用

((double)100)/hmm;

0
投票

整数除法总是drops小数点。因此,类似1 / 100 = .01的东西将变为0。


0
投票

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

IE。

offset = 100 / ((double)hmm);
© www.soinside.com 2019 - 2024. All rights reserved.