Visual Studio C# .NET 5.0控制台应用转换小数丢失小数点如何解决
修复方案
该问题由系统区域文化配置导致,和Visual Studio安装状态无关。Convert.ToDecimal默认会读取当前线程绑定的系统文化规则解析数字:如果你的系统默认小数分隔符为逗号,、数字千位分隔符为点.,输入的62.5会被识别为千位分隔符直接过滤,最终得到625。在线编译器默认使用不随系统变化的固定文化(Invariant Culture),因此运行结果符合预期。
你可以按优先级选择以下任意一种方案修复:
- 方案1:单处解析指定固定文化
将原有Convert.ToDecimal替换为显式指定不变文化的decimal.Parse,示例代码如下:
该方案仅修改当前的数字解析逻辑,不影响程序其他功能的文化适配。// 替换原来的Convert.ToDecimal行 input_1 = decimal.Parse(input_1_b, System.Globalization.CultureInfo.InvariantCulture); input_2 = decimal.Parse(input_2_b, System.Globalization.CultureInfo.InvariantCulture); input_3 = decimal.Parse(input_3_b, System.Globalization.CultureInfo.InvariantCulture); - 方案2:全局修改程序默认文化
在Main方法入口最上方添加两行代码,全局指定所有类型转换默认使用不变文化:
该方案无需修改原有转换逻辑,全局生效,适用于所有程序内数字、日期解析都要和在线编译器行为一致的场景。static void Main(string[] args) { // 新增以下两行 System.Globalization.CultureInfo.DefaultThreadCurrentCulture = System.Globalization.CultureInfo.InvariantCulture; System.Globalization.CultureInfo.DefaultThreadCurrentUICulture = System.Globalization.CultureInfo.InvariantCulture; // 原有代码不需要改动 string input_1_b; // ...其余原有代码 } - 方案3:修改系统级区域配置
打开Windows控制面板→区域→其他设置,将小数分隔符修改为.、数字分组符号修改为,,保存配置后重启Visual Studio即可生效。该方案会影响所有本地运行的程序的数字、日期解析规则。
内容的提问来源于stack exchange,提问作者Mical -
相关产品推荐
相关产品推荐

