2017-09-04 18 views
1

我试图解析双打从字符串infering用下面的代码:转换字符串到双是不对的

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 
+0

我不知道这是答案,但我曾经有过类似的问题,原来是位置设置和不同地区使用。或者为小数。 –

+0

您可以添加[MCVE](https://stackoverflow.com/help/mcve)吗?例如,您可以使用[.NETFiddle](https://dotnetfiddle.net/)。 – aloisdg

+0

在不能正常工作的机器上,您是否100%肯定**字符串是“0.5”?它可能是'0,5'吗?你能告诉我们'contractResult.Result.ValueWithDiscount'在哪里填充? – mjwills

回答

2

如果你总是用一个 ”。”作为小数点分隔符,您可以使用修复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(",", "."); 
+0

将试一试;) –

+0

它转换为5. –

+0

你确定值“0.5”解析为“5”吗? – PinBack