Unity编辑器运行正常,Xcode打包后出现FormatException异常
问题解决:iOS打包后float解析FormatException
核心原因
iOS设备或打包后的运行环境默认使用的区域文化设置中,小数点分隔符不是.(比如部分欧洲地区用,),而你提取的字符串用.作为小数点,直接调用float.Parse()会因格式不匹配抛出异常。Unity编辑器中因为你的系统文化默认用.,所以运行正常。
解决方案
方法1:指定不变文化(最可靠)
解析时明确使用InvariantCulture,强制按.作为小数点规则解析:
using System.Globalization; // 假设extractedString是你提取到的"81.6" string extractedString = "81.6"; float moonPhase; if (float.TryParse(extractedString, NumberStyles.Float, CultureInfo.InvariantCulture, out moonPhase)) { // 解析成功,使用moonPhase变量 } else { // 处理解析失败的 fallback 逻辑 }
方法2:适配当前区域的分隔符
将字符串中的.替换为当前系统的小数点分隔符:
using System.Globalization; string extractedString = "81.6"; string adjustedString = extractedString.Replace('.', CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator[0]); float moonPhase = float.Parse(adjustedString);
额外验证步骤
如果问题仍存在,可以先打印当前区域的小数点分隔符,确认是否是分隔符导致的问题:
Debug.Log("当前小数点分隔符:" + CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);
内容的提问来源于stack exchange,提问作者PeterK
相关产品推荐
相关产品推荐

