C# 浮点数学,63.500000 x 2=127000000

C# 浮点数学,63.500000 x 2=127000000,c#,.net,hardware,C#,.net,Hardware,以下代码有问题: 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.I

以下代码有问题:

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上运行(~2009 MacBook通过Bootcamp运行Windows):

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))
似乎失去了小数点的位置。这种情况发生在多台电脑上(但我从未访问过任何一台电脑)。这里似乎发生了某种类型的浮点数学错误,但我不确定是什么。有人能告诉我发生了什么事吗?

你呢

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


(多亏了皮特的评论才得以修复)

不清楚出了什么问题。movementMultiplier的值是多少?对不起,我会加进去的。这是一个文化问题,小数点是逗号而不是点。您需要使用CultureInfo.InvariantCultureAll那么,有问题的客户端运行的是什么语言/文化?您正在将这些浮动解析为文本字符串或从文本字符串中解析出来。你在使用什么文化?我认为这是一个字符串解析问题,而不是浮点问题;结果在我的计算机上是一样的,我将把它发送给客户端进行测试。我没有考虑过这一点,但这似乎是个问题。它不应该是
Convert.ToInt32(Convert.ToSingle(x,CultureInfo.InvariantCulture))
?导致问题的是对float的转换,而不是对int的转换。@Pete-你是对的。我使用var culture=CultureInfo.GetCultureInfo(“de”)验证了问题/解决方案;