1

我这里有点问题。我在下面有一个应用程序片段,该应用程序在美国、英国、南非和澳大利亚的全球 PC 上运行良好。但是,在两台德国同事的机器上,以下代码失败并出现以下错误:

System.OverflowException:对于 Int16,值太大或太小。

这发生在 Convert.ToInt16 步骤中。我想知道这是否可能是由于德国的十进制系统是逗号而不是句号引起的?此外,该示例的 fieldItemsValues 值为:

[InputText_confirmName,0,2,49.5216,726.6744,303.2712,47.9664,false,0,0,false,0]

所有字符串

string[] widgetProperties = fieldItemValues[0].Split('_');
string widgetType = widgetProperties[0];
string widgetID = widgetProperties[1];
Console.WriteLine("Type: " + widgetType + " ID: " + widgetID);

float widgetLeft = Convert.ToSingle(fieldItemValues[3]);
float widgetTop = Convert.ToSingle(fieldItemValues[4]);
float widgetWidth = Convert.ToSingle(fieldItemValues[5]);
float widgetHeight = Convert.ToSingle(fieldItemValues[6]);

int widgetLeftPx = Convert.ToInt16(widgetLeft * 2.0);
int widgetTopPx = Convert.ToInt16(widgetTop * 2.0);
int widgetWidthPx = Convert.ToInt16(widgetWidth * 2.0);
int widgetHeightPx = Convert.ToInt16(widgetHeight * 2.0);
4

2 回答 2

2

我想这是你的问题:726.6744

在德语符号中,“。” 是千位分隔符,而不是逗号 - 你必须添加一个语言环境。所以英文 726.6744 变成 7,266,744.00

于 2013-08-07T15:22:30.823 回答
0

你需要改变

Convert.ToInt16(widgetLeft * 2.0);

NumberStyles style = style = NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands;
Int16.Parse(widgetLeft * 2.0, style, CultureInfo.InvariantCulture);

你可以在这里阅读更多关于 NumberStyles 和关于文化信息的信息

于 2013-08-07T15:33:05.397 回答