我试图用double.TryParse()
解析字符串“0.0000”,但我不知道为什么它会在这个特定的例子中返回false。当我传递类似整数的字符串时,例如“5”它正确解析为5的值。
任何想法为什么会发生?
答案 0 :(得分:50)
它将运行时的本地化设置考虑在内...也许您在.
不是小数点但,
代替...
在您的具体情况下,我假设您想要一个固定的文化,无论您使用.
作为小数点运行的系统如何:
double.TryParse("0.0000", NumberStyles.Number, CultureInfo.CreateSpecificCulture ("en-US"), out temp)
OR
double.TryParse("0.0000", NumberStyles.Number,CultureInfo.InvariantCulture, out temp)
一些MSDN参考链接:
答案 1 :(得分:9)
TryParse
默认使用当前文化。如果您当前的文化使用与.
不同的小数分隔符,则无法按您的意图解析0.0000
。所以你需要传递CultureInfo.InvariantCulture
。
var numberStyle = NumberStyles.AllowLeadingWhite |
NumberStyles.AllowTrailingWhite |
NumberStyles.AllowLeadingSign |
NumberStyles.AllowDecimalPoint |
NumberStyles.AllowThousands |
NumberStyles.AllowExponent;//Choose what you need
double.TryParse( "0.0000", numberStyle, CultureInfo.InvariantCulture, out myVar)
答案 2 :(得分:3)
几乎可以肯定,问题是Thread.CurrentCulture
不使用点作为小数点分隔符。
如果您知道该号码将始终使用点作为小数点分隔符进行格式化,请使用此代码,该代码使用double.TryParse
style = NumberStyles.Float | NumberStyles.AllowThousands;
culture = CultureInfo.InvariantCulture;
float num;
if (double.TryParse("0.0000", style, culture, out num)) {
// whatever
}
:
{{1}}
答案 3 :(得分:2)
如果当前文化指定的小数点分隔符不同于false
字符,它将返回.
。
解析字符串表示时,你需要知道它们代表什么文化,否则你会得到意想不到的行为。
在这种情况下,你得到false
,但它甚至可能更糟,例如在下面的例子中,如果你期望得到第一个,你会得到一千:
Thread.CurrentThread.CurrentCulture = new CultureInfo("pt-PT");
double d;
Console.WriteLine(double.TryParse("1.000", out d));
Console.WriteLine(d);
这是因为在pt-PT
文化中,.
字符用作NumberGroupSeparator
,,
字符用作NumberDecimalSeparator
。
如果您正在解析的输入来自用户,则始终使用与用户关联的区域性来解析它。获取用户所关联的文化取决于上下文,例如在Windows窗体应用程序中,在UI线程上使用Thread.CurrentThread.CurrentCulture
来获取它。在ASP.NET应用程序中,这可能会有所不同。
答案 4 :(得分:1)
将文化改变为具有"。"作为小数分隔符使用:
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB");
答案 5 :(得分:1)
当此方法返回时,包含双精度浮点数 等于s参数的数字,如果转换成功,或者 如果转换失败,则为零。
从此方法的MSDN页面。
http://msdn.microsoft.com/en-us/library/994c0zb1.aspx
零进入,零出现。
答案 6 :(得分:0)
使用TryParse更改CultureInfo对我没有任何帮助。我必须更改控制面板下的数字格式(更改,日期,时间或数字格式)并更改十进制符号。比它再次工作。
答案 7 :(得分:-1)
最愚蠢的是它只接受","作为我文化中的小数分隔符,但结果是"。"。某个人,某个地方,当天没想到...... 所以我试试这个:
if ((double.TryParse(sVat, out vat)) == false)
if (double.TryParse(sVat.Replace(",", "."), out vat) == false)
double.TryParse(sVat.Replace(".", ","), out vat);
答案 8 :(得分:-3)
它对我有用:
double temp = 0;
Console.WriteLine(double.TryParse("0.0000", out temp));
Console.ReadLine();
写True
。