C#中字符串转decimal异常:14.80转为1480问题求助
解决字符串转Decimal时14.80变成1480的问题
嘿,这个问题我碰到过好多次,百分百是区域文化设置在搞鬼!
问题根源
默认情况下,decimal.Parse(或者你用的其他转换方法)会使用当前线程的区域文化规则来解析字符串。如果你的系统区域是用逗号作为小数点分隔符的(比如欧洲、南美很多地区),它会把字符串里的.当成千位分隔符直接忽略掉,这就导致14.80被错误解析成1480了。
解决方案
转换的时候明确指定不变区域性(InvariantCulture),强制让解析器把.识别为小数点。结合你的代码,修改后的转换逻辑可以这样写:
// 记得先引入命名空间 using System.Globalization; // 在你创建对象的代码里,替换原来的转换逻辑 decimal price = decimal.Parse(splitStrings[0], CultureInfo.InvariantCulture);
如果想更安全(避免转换失败抛出异常),推荐用TryParse:
if (decimal.TryParse(splitStrings[0], NumberStyles.Number, CultureInfo.InvariantCulture, out decimal price)) { // 这里写转换成功后的对象创建逻辑 } else { // 处理字符串格式不正确的情况,比如日志记录或者提示 }
额外提醒
如果你的TXT文件里的数值格式是固定用.做小数点的,不管运行环境的区域设置,都一定要用InvariantCulture来解析,这样就能彻底避免这类跨区域的格式识别问题啦。
内容的提问来源于stack exchange,提问作者rokie12234
相关产品推荐
相关产品推荐

