System.FormatException错误求助:字符串转整数格式异常
问题排查与解决思路
- 报错根源:错误栈明确指向
Int32.Parse,说明el.absoluteBoundingBox.x/y/width/height转成字符串后,无法被解析为整数。常见原因包括:这些数值是带小数的浮点数(如123.45),转字符串后包含小数点;或是生成的字符串为空、包含非数字字符。 - 排除无关代码:你之前怀疑的
string.Format语句和当前报错完全无关——那个语句里没有占位符,直接写字符串即可,但它并不是引发FormatException的原因。 - 修复方案:
- 若只需取整数部分,直接用
Convert.ToInt32()处理数值,无需转字符串再解析:int val_0 = Convert.ToInt32(el.absoluteBoundingBox.x); int val_1 = Convert.ToInt32(el.absoluteBoundingBox.y); int val_2 = Convert.ToInt32(el.absoluteBoundingBox.width); int val_3 = Convert.ToInt32(el.absoluteBoundingBox.height); - 若需要四舍五入,先用
Math.Round()处理再转整数:int val_0 = (int)Math.Round(el.absoluteBoundingBox.x); - 更安全的写法是用
int.TryParse()避免崩溃,同时捕获无效情况:if (!int.TryParse(el.absoluteBoundingBox.x.ToString(), out int val_0)) { // 处理解析失败逻辑,比如设置默认值或记录提示 val_0 = 0; _list.Add(" -- ELEMENT jakis IS INVALID, PLEASE CONFIGURE IT PROPERLY"); }
- 若只需取整数部分,直接用
- 额外注意:直接调用数值的
ToString()可能因区域设置生成带逗号的小数(如部分欧洲地区用逗号代替小数点),也会导致解析失败。若必须转字符串再解析,建议指定不变文化信息:int val_0 = int.Parse(el.absoluteBoundingBox.x.ToString(CultureInfo.InvariantCulture));
内容的提问来源于stack exchange,提问作者Kuba Jeśko
相关产品推荐
相关产品推荐

