我有很多代表旋转值的字符串。这些字符串有 0 到 5 位小数。
将这些字符串转换为浮点数以将其作为旋转值应用到游戏对象时,浮点数始终会被截短至小数点后 4 位。对于超过 500 个游戏对象,随着时间的推移,这将导致巨大的不精确性。
如何保留所有小数位?
这是我使用的代码[为了更好地理解而修改]:
myString = "344.93873";
segment.transform.rotation = Quaternion.Euler((float)double.Parse(myString), 0f, 0f);
我得到的是
344.9387
,最后没有3
。损失发生在这里:(float)double
。
但是,当在Unity3D中手动旋转对象时,我可以在检查器中看到小数点后4位以上的旋转值。
float.ToString
ToString() 方法以当前区域性的默认(“G”或通用)格式格式化单个值。
float
(=Single
)
单人
表示数字的最小可往返位数(在 .NET Framework 中,G7 是默认值)
现在您输入的号码
344.93873
有 8 位数字,因此默认情况下它被限制为
344.9387
只有 7 位数字。
float
可以有 ~6-9 digits
所以为了确保始终看到您应该使用的完整值
print(myFloat.ToString("G9"));