我需要知道是否有办法将string
解析为double
的普通格式,例如:
string str = "1.500,43";
到
double num = 1500.43;
我的尝试不起作用。我得到了0
:
double number=0;
double.TryParse("1.500,43", out number);
我知道我可以删除"."
并将","
更改为"."
而不是TryParse
,但我想找到另一种方式。
有谁知道怎么做?
答案 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和.Parsenew System.Globalization.NumberFormatInfo()
您可以在其上将NumberDecimalSeparator属性设置为逗号。
这样您就不需要乱用cultureinfo,但可以按需设置它。
编辑:像这样
double.Parse("1.500,43", new System.Globalization.NumberFormatInfo()
{
NumberDecimalSeparator = ",",
NumberGroupSeparator = "."
});