指定正确的IFormatProvider / CultureInfo
您观察到的行为可能是由于两台机器具有不同的CurrentCulture而导致的. CurrentCulture的默认值取决于Windows的版本.
要在各种机器上获得一致的结果,您应该为Parse或TryParse方法提供特定的CultureInfo(或实现IFormatProvider的任何其他类),例如:
// using System.Globalization;
double value = Double.Parse(stringValue,CultureInfo.InvariantCulture);
要么
double valueUsEnglish = Double.Parse(stringValue,new CultureInfo("en-US"));
Parse方法使用特定于区域的小数点符号和组分隔符号.在某些语言中(例如英语),小数点符号是点,而在其他语言中(例如波兰语),它是逗号.组分隔符号在各种语言中也不同.
如果将53.345634解析为53345634,则您的计算机将使用其中dot为组分隔符的区域性.
Parse与TryParse
您还应该考虑使用Parse of TryParse方法是否更合适.
如果在正常操作期间您的程序期望无效输出(例如,它是用户提供的值),您绝对应该使用TryParse并检查返回值. TryParse返回一个bool,指示解析是否成功并且不会抛出异常.
如果您正在解析的值永远不会出错(例如,您正在解析与您的程序绑定的资源),则可以使用Parse.如果您有某种方法可以恢复或向用户提供一些其他信息,则可以捕获适当的例外情况.根据文档,可能的例外是:ArgumentNullException,FormatException和OverflowException.