首页 > 解决方案 > 我的坐标系统中的一个小错误

问题描述

我正在尝试将坐标点存储在双变量中。这很简单。我有 x 和 y 坐标。我的双变量像 xy 一样存储它们。当我试图将此值转换为单独的坐标时,我遇到了一些麻烦。

我已经尝试了这些代码,但仍然得到同样的错误。

 //First try
 double temp=memory.pop();
 int x=(int)temp;
 int y=(int)((temp-(int)temp)*100);
 //Second try
 double temp=memory.pop();
 int x=(int)temp;
 int y=100.0f*temp-(((int)temp)*100.0f);

在临时变量中,我有 5.14 双数。经过计算,x 应该是 5,y 应该是 14。但是,x 变为 5,y 变为 13。

标签: c++math

解决方案


该问题与整数转换有关。具体来说(int)temp,将下降到第一个较小的整数。例如,值5,14可以(并且可能是)不精确,但在精度问题上有点小/大(因为,正如评论中所说,浮点数没有无限精度)。因此,在不失一般性的情况下,假设是5,13999999999999,您可以看到,当您执行操作时,您将获得13而不是坐标第二部分的14


推荐阅读