字符串加倍数。(格式为##。###,##)

时间:2014-11-16 13:09:35

标签: c# .net string double

我需要知道是否有办法将string解析为double的普通格式,例如:

string str = "1.500,43";

double num = 1500.43;

我的尝试不起作用。我得到了0

double number=0;
double.TryParse("1.500,43", out number);

我知道我可以删除"."并将","更改为"."而不是TryParse,但我想找到另一种方式。

有谁知道怎么做?

4 个答案:

答案 0 :(得分:5)

如果您对IFormatProvider方法不使用任何double.TryParse,则默认使用CurrentCulture

您的CurrentcCulture NumberDecimalSeparator或/和NumberGroupSeparator属性可能与,.不匹配。

作为解决方案,您可以.Clone CurrentCulture并设置这些属性,例如;

var culture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
culture.NumberFormat.NumberDecimalSeparator = ",";
culture.NumberFormat.NumberGroupSeparator = ".";
double number;
if(double.TryParse("1.500,43", NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands,
                   culture, out number))
{
    // Successful parsing
}

通常,使用字符串方法替换.,不是一个好主意。

答案 1 :(得分:2)

在尝试转换字符串时,您需要告诉TryParse要使用哪种文化。您拥有的格式是在欧洲大陆使用的十进制逗号和千位分隔符的句号。

如果失败了,您可以先尝试使用英语格式,然后尝试使用英语格式,但如果省略千位分隔符,则有些情况会转换为有效但不同的数字。

最好坚持以一种格式输入数字,或者从用户的语言环境中选择格式。如果你有人使用不同地区的网站(例如德国的英国人),后一种方法可能会失败。

答案 2 :(得分:1)

假设您的CultureInfo是德语,您可以使用:

var culture = new CultureInfo("de");
double number = 0;
double.TryParse("1.500,43", NumberStyles.Number, culture, out number);

当然,这也适用于小数分隔符和千位分隔符不同的其他文化。只需使用您所在国家/地区的文化代码

即可

答案 3 :(得分:1)

您可以使用以下参数

调用.ToString和.Parse

new System.Globalization.NumberFormatInfo()

您可以在其上将NumberDecimalSeparator属性设置为逗号。

这样您就不需要乱用cultureinfo,但可以按需设置它。

编辑:像这样

double.Parse("1.500,43", new System.Globalization.NumberFormatInfo()
                                                  {
                                                      NumberDecimalSeparator = ",",
                                                      NumberGroupSeparator = "."
                                                  });
相关问题