String 到 Double 的转换不正确

Conversion of String to Double is not right

我正在尝试使用以下代码解析从字符串推断出的双精度值:

double.TryParse(contractResult.Result.ValueWithDiscount, NumberStyles.Any, CultureInfo.InvariantCulture, out ValueWithDiscount);
double.TryParse(contractResult.Result.DebitValue, NumberStyles.Any, CultureInfo.InvariantCulture, out Value);

但由于某种原因它不起作用。我有两台服务器,它们的配置彼此不同。一个是将 "0.5" 解析为 0.5 但另一个是解析为 5.

我也试过用:

double.TryParse(contractResult.Result.DebitValue, NumberStyles.Any, CultureInfo.CurrentCulture, out Value);

但是随后正确解析的服务器开始解析为 50 而不是 0.5。为什么会这样?

更新 - 使用以下代码的值:

NumberFormatInfo loNumberFormatInfo = new NumberFormatInfo();
loNumberFormatInfo.NumberDecimalSeparator = ".";
loNumberFormatInfo.NumberGroupSeparator = ",";
double ValueWithDiscount = 0.0;
double.TryParse(contractResult.Result.ValueWithDiscount, NumberStyles.Any, loNumberFormatInfo, out ValueWithDiscount);    
logger.Log("ValueWithDiscount: " + contractResult.Result.ValueWithDiscount);
logger.Log("ValueWithDiscount Parsed: " + ValueWithDiscount);

可用的服务器:

ValueWithDiscount: 0.50
ValueWithDiscount Parsed: 0,5

服务器不工作:

ValueWithDiscount: 0,5
ValueWithDiscount Parsed: 5

如果您总是使用“.”作为小数点分隔符,您可以使用固定的 FormatInfo 进行转换。

NumberFormatInfo loNumberFormatInfo = new NumberFormatInfo();
loNumberFormatInfo.NumberDecimalSeparator = ".";
loNumberFormatInfo.NumberGroupSeparator = ",";

double ldOut;
double.TryParse("0.5", NumberStyles.Any, loNumberFormatInfo, out ldOut);

更新:

如果您的字符串包含“.”和","你可以在转换之前替换","。

string lsNumber = "0,5";
lsNumber = lsNumber.Replace(",", ".");