UnityScript中的浮点数除法问题

3
为什么这段代码输出的是 536870912 而不是 536870911.5 呢?
var z : double = 1073741823.0 / 2.0;
Debug.Log(z.ToString("F15"));

我该如何使其输出536870911.5呢?这对我来说似乎有些奇怪...
1个回答

3
你可以使用以下C#代码获取它:
double test = 1073741823.0d / 2.0d; // = 536870911.5
Debug.Log(test);

在UnityScript中,你只需要添加字母"d"。
var test : double = 1073741823.0d / 2.0d; // = 536870911.5
Debug.Log(test);

没有使用双重符号时,UnityScript会将数字解析为其他类型(很可能是int型)。
以下代码无法正常工作,因为解释器没有正确转换它们:
var test : double = 1073741823.0 / 2.0; // = 536870912
Debug.Log(test);

看起来它读取的是: double = int / int;


非常有趣。这是我鼓励开发人员转向C#的另一个原因。


1
它看起来更像是32位浮点数而不是整数。大多数整数除法会截断,因此1073741823/2将是536870911,而不是536870912。大多数浮点实现默认四舍五入,在IEEE-754 32位二进制浮点数中,1073741823四舍五入为1073741824。 - Eric Postpischil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接