c++ - 我的坐标系统中的一个小错误
问题描述
我正在尝试将坐标点存储在双变量中。这很简单。我有 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。
解决方案
该问题与整数转换有关。具体来说(int)temp
,将下降到第一个较小的整数。例如,值5,14可以(并且可能是)不精确,但在精度问题上有点小/大(因为,正如评论中所说,浮点数没有无限精度)。因此,在不失一般性的情况下,假设是5,13999999999999,您可以看到,当您执行操作时,您将获得13而不是坐标第二部分的14。
推荐阅读
- android - 如何从 RecyclerView 适配器持有者访问数据库?
- python - 如何使 2 个 tkinter 窗口的 2 个函数更加简洁?
- javascript - mongodb:如何在聚合操作中使用组运算符中的变量?
- csv - Miller - Ignore valid field names when using -N
- 3d - JavaFX 8 3D 深度测试取决于添加的订单对象
- spring - 基于实体变量的 URL 块
- html - 无法在按钮内居中文本
- javascript - 使用 IntersectionObserver 在 React 中滚动时突出显示侧边栏导航项的问题
- excel - 使用 VBA 更新链接
- python - 安装了多个 Python 版本:如何为 CMD 和“打开方式”设置 py.exe(Windows 的 Python 启动器)的默认版本