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 経由で Wi​​ndows を実行している ~ 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で発生します(ただし、テストにアクセスできるPCはありません)。ここで何らかの種類の浮動小数点演算エラーが発生しているように見えますが、何が原因かわかりません。誰が何が起こっているのか提案できますか?

4

1 に答える 1

3

どうですか

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

(ピートのコメントのおかげで修正されました)

于 2013-02-20T19:41:44.413 に答える