【问题标题】: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 除法 - hmm100 都是整数。因此,如果hmm 大于 100,它将始终给出 0 作为结果。将任一操作数转换为double,它将使用浮点运算。例如:

    double offset = 100.0 / hmm;
    

    【讨论】:

      【解决方案2】:

      尝试使用

       offset = 100./hmm;
      

      问题是您使用的是整数除法。

      【讨论】:

        【解决方案3】:

        您正在100hmm 之间进行整数除法。结果将始终是一个整数,您会看到它产生 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);
              

              【讨论】:

                猜你喜欢
                • 2014-03-26
                • 2012-07-17
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多