将字符串转换为十进制神秘

use*_*153 9 .net c# string decimal

我正面临着使用C#.NET从字符串转换为十进制的问题.问题是我编写了以下代码,并在我的开发Windows 7 .NET Framework 3.5系统上正常工作.但是,如果我在Windows 2003 Server .NET 3.5 Framework上移动应用程序,结果会有所不同.谁能理解那里发生了什么?

码:

dec = Convert.ToDecimal(strDec);
Run Code Online (Sandbox Code Playgroud)

Windows 7结果:85.00 Windows 2003结果:8500

age*_*t-j 20

可能是服务器上的区域和区域设置设置,为十进制和.数字分组.请参阅控制面板/区域和区域性设置.

如果您的应用程序生成此数字字符串,我会CultureInfo.InvariantCulture在两个地方使用.

     Decimal dec = 85.0m;
     string s = dec.ToString (CultureInfo.InvariantCulture);
     decimal.Parse(s, CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

  • 提问者没有说输入字符串是什么,但我怀疑这是正确的.+1 (3认同)

Mar*_*age 9

您受区域设置的影响.当字符串85.00在完全停止用作小数分隔符的语言环境中解析时,结果为85.00.如果逗号用作小数分隔符,则结果为8500.

使用指定的重载CultureInfo:

var dec = Convert.ToDecimal(strDec, CultureInfo.GetCultureInfo("en"));
Run Code Online (Sandbox Code Playgroud)

您还可以使用CultureInfo.InvariantCulture哪个是默认的.NET CultureInfo,类似于英语CultureInfo.

在生产质量应用程序中,您应始终CultureInfo在解析和格式化字符串时指定或知道使用的内容.如果您在项目中启用代码分析,则会在忘记执行此操作时收到警告:CA1304:指定CultureInfo.