Windows 表格应用中的数学运算

Math Operation in Windows Form Application

我正在尝试使用 windows 表单应用程序中的函数将给定点转换为另一个坐标系。但是,我遇到了一个奇怪的问题。输入正确但输出始终为 0。首先,我认为这是由于局部变量引起的,然后我只使用整数而不是变量,但没有解决。我对此一无所知。这里的代码和输出基本上是:

string[] newPoint1 = convertPoints(X1, Y1);

string[] convertPoints(int oldX, int oldY)
        {
            //int newX = ((oldX - oldLeft) / (oldRight - oldLeft)) * (newRight - newLeft);
            MessageBox.Show(oldX.ToString());   // output is 296 
            int newX = (oldX / 500) * 4096;   // ?????????????????????  (296/500) * 4096  = 0 ?????????????
            MessageBox.Show(newX.ToString()); // here output is 0
            int newY = newTop + ((oldY - oldTop) / (oldBottom - oldTop)) * (newBottom - newTop);
            
            //MessageBox.Show(newY.ToString());
            string[] newPoints = {newX.ToString(), newY.ToString()};
            //MessageBox.Show(newPoints[0], newPoints[1]);
            return newPoints;
        }

你得到的是 0,因为 oldX/500 通常是一个分数,而且由于你使用的是 int 数据类型,所以只能是整数。我建议做的是更改数据类型然后自行舍入。

  //Old code
  int newX = (1 / 500);
  Console.WriteLine(newX);
  // writes 0 to console


  //New code
  double newXD = (1 / 500.0) * 4096;
  Console.WriteLine(newXD);
  //Writes 8.192

1 和 500 被认为是整数 try

Console.WriteLine(1/500);

它将 0 写入控制台。

Console.WriteLine(1/500.0);
Console.WriteLine((float)1/500);
Console.WriteLine((double)1/500);

所有这些都将 8.192 写入控制台。

然后在你拥有 double 或其他更准确的数据类型后,如果你真的想要一个 int,请考虑四舍五入。

一个integer除法会去掉小数位。所以在你的情况下,296/500 你会期望 0.592。由于 integer 没有小数位,它会将它们截断,结果为 0。

oldX 加倍并除以 500.0

这是正常的。因为 oldX 是一个整数,所以当您除以它时,它会四舍五入(舍去小数点后的所有内容)。我会把它转换成浮点数然后再转换成整数,就像这样

int newX  = (int)(((float)oldX / 500) * 4096);

这将保留整个数字,直到您最后完成。您还需要对 Y 值执行相同的操作