3

以下代码有问题:

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 运行 Windows 的〜2009 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 上(但是我从来没有访问过测试)。这里似乎发生了某种类型的浮点数学错误,但我不确定是什么。谁能建议发生了什么?

4

1 回答 1

3

关于什么

Convert.ToInt32(Convert.ToSingle(x, CultureInfo.InvariantCulture) )

?

(修复感谢皮特的评论)

于 2013-02-20T19:41:44.413 回答