【发布时间】:2018-06-24 00:36:49
【问题描述】:
我正在使用 Unity Asset Store 中的一项名为 World Map Strategy Kit 的资源来开发棋盘游戏。该工具包使用 Vector2 的列表,其值从 -0.5 到 +0.5 来确定我地图上省份/国家的边界。
我正在努力读取 SVG 路径并将它们转换为 WMSK 输入的点列表。
基本上,没有给你我的整个 40 行解析方法,我有如下设置:
string raw = "1213.6788";
float x = float.Parse(raw);
float y = float.Parse(raw);
Vector2 a = new Vector2 (x, y);
Debug.Log(a);
它始终将结果四舍五入为 1213.7。
一开始我以为这可能只是 float 的 Parse 方法的一个怪癖,所以我写了一个如下所示的改编版本:
string raw = "1213.6788";
float x = (float)double.Parse(raw);
float y = (float)double.Parse(raw);
Vector2 a = new Vector2 (x, y);
Debug.Log(a);
同样的事情。它四舍五入到最接近的十分之一。
我注意到以下类似的事情:
string rawX = "1213.6788";
string rawY = "891.7";
float x = (float)double.Parse(raw);
float y = (float)double.Parse(raw);
Vector2 a = new Vector2 (x, y);
int tw = 2500;
int th = 1250;
Vector2 translated = new Vector2 ();
translated.x = (a.x - tw * 0.5f + 0.5f) / tw;
translated.x = (a.y - th * 0.5f + 0.5f) / th;
Debug.Log(a);
现在的输出是: (0.0, 0.2)
再次将其四舍五入到最接近的十分之一。我可以接受相当程度的不准确,但这根本无法接受——我试图将坐标从 2500×1250 坐标系转换为 1×1 坐标系,范围从 -0.5 到 +0.5。我希望大多数坐标需要 3-5 个小数点的信息才能正确存储。
在我使用过的任何编程语言中——即使是 Java——也没有定期将浮点数四舍五入到最接近的十分之一。根据我的经验,这不是他们通常会做的事情。
所以问题是:我做错了什么?我的意思是,当然可以将信息解析为浮点数而不会丢失几乎所有的小数位信息?
它会不会是我的电脑(我有一台相对较弱且过时的笔记本电脑,2010 年的 1 GHz Intel CPU 和 2 GB RAM - 是的,我知道我需要升级)?
还是 Unity 特有的?会不会是 Vector2 数据结构造成的损失?
【问题讨论】:
标签: unity3d precision parsefloat