以下代码有问题:
private const int movementMultiplier = 2;
void Test() {
XmlNode xnXCoordinate = xd.SelectSingleNode("/data/x");
XmlNode xnYCoordinate = xd.SelectSingleNode("/data/y");
int xLoc = Convert.ToInt32(Convert.ToSingle(xnXCoordinate.InnerText)) * movementMultiplier;
int yLoc = Convert.ToInt32(Convert.ToSingle(xnYCoordinate.InnerText)) * movementMultiplier;
}
此代码在客户端的PC上运行(通过Bootcamp运行Windows2009年的MacBook ),给定值/结果:
xnXCoordinate.InnerText = 63.500000
xnYCoordinate.InnerText = 242.000000
XLoc = 127000000
yLoc = 484000000
当我运行它的时候,我会想出:
xnXCoordinate.InnerText = 63.500000
xnYCoordinate.InnerText = 242.000000
XLoc = 128
yLoc = 484
不知何故,Convert.ToInt32(Convert.ToSingle(x))
似乎忘记了小数位。这会在多台PC上发生(但从来没有,我有权进行测试)。这里似乎发生了某种类型的浮点数学错误,但我不确定是什么错误。有没有人能告诉我发生了什么事?
发布于 2013-02-21 03:41:44
关于
Convert.ToInt32(Convert.ToSingle(x, CultureInfo.InvariantCulture) )
(已修复,感谢Pete的评论)
https://stackoverflow.com/questions/14988447
复制相似问题