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(",", ".");
我正在尝试使用以下代码解析从字符串推断出的双精度值:
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(",", ".");