除以两个小数点后在C#中获得不正确的输出

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

我有一个程序,将一个变量与另一个变量相除。但是我得到的答案是不正确的!请检查下面的图片:

l

下面的代码:

      iter_defects++;
      df1[iter_defects].blob_id = b.Id;
      decimal convertX = Convert.ToDecimal(txtmmtopixX.Text);
      decimal convertY = Convert.ToDecimal(txtmmtopixY.Text);
      df1[iter_defects].count = iter_defects;

      df1[iter_defects].cog_X = Math.Round( Convert.ToDecimal( b.Centroid.X)) / convertX;
      df1[iter_defects].cog_Y = Math.Round(Convert.ToDecimal(b.Centroid.Y ))/ convertY;
     if (df1[iter_defects].cog_X > 10 && df1[iter_defects].cog_X < 30)
      {

     if (df1[iter_defects].BY > 1 && df1[iter_defects].BY < 74)
      {
       df1[iter_defects].cog_X = df1[iter_defects].cog_X - 20;

       }

      if (df1[iter_defects].BY > 64 && df1[iter_defects].BY < 129)
        {
         df1[iter_defects].cog_X = df1[iter_defects].cog_X - 20;

         }

      if (df1[iter_defects].BY > 118 && df1[iter_defects].BY < 183)
         {
           df1[iter_defects].cog_X = df1[iter_defects].cog_X - 20;

         }

       }

b.centroid.X和b.centroid.Y在默认情况下是双精度的,因此我会将其转换为十进制。

如果我将147除以9.3,我应该得到大约16,但是我得到7.9!

以前我使用的是double而不是十进制,但是即使十进制也会出现相同的问题。已将变量值固定在右侧的图像上。

可能有什么问题?

更新:

在我的嵌套if语句中,我基于少量条件进行了更多的算术运算。当我删除这些条件时,计算就很好了。现在更困惑了。下面的代码有效,但是没有这些条件,本节之后的代码将无效:

  iter_defects++;
  df1[iter_defects].blob_id = b.Id;
  decimal convertX = Convert.ToDecimal(txtmmtopixX.Text);
  decimal convertY = Convert.ToDecimal(txtmmtopixY.Text);
  df1[iter_defects].count = iter_defects;

  df1[iter_defects].cog_X = Math.Round( Convert.ToDecimal( b.Centroid.X)) / convertX;
  df1[iter_defects].cog_Y = Math.Round(Convert.ToDecimal(b.Centroid.Y ))/ convertY;
 if (df1[iter_defects].cog_X > 10 && df1[iter_defects].cog_X < 30)
  {
  df1[iter_defects].cog_X = df1[iter_defects].cog_X - 20;
  }
c# .net visual-studio mathematical-optimization division
1个回答
0
投票

尚不完全清楚您的程序如何工作,但我认为问题可能是因为您处于某种循环中,并且当您检查结果时,已经发生了一次以上的迭代,并且基值(例如[ C0])已更改,因此您的比较数学将不匹配。

© www.soinside.com 2019 - 2024. All rights reserved.