我正在尝试将string
格式的数字转换为double
。它可以是 English 文化或丹麦文化。这是我正在尝试的代码
public static double ToDoubleOrDefault(this string value)
{
var doubleValue = default(double);
var danishCultureInfo = new CultureInfo("da-DK");
var englishCultureInfo = new CultureInfo("en-US");
if (double.TryParse(value,
NumberStyles.AllowDecimalPoint,
englishCultureInfo,
out doubleValue))
{
return doubleValue;
}
else if (double.TryParse(value,
NumberStyles.AllowDecimalPoint,
danishCultureInfo,
out doubleValue))
{
return doubleValue;
}
return doubleValue;
}
如果直到丹麦语编号具有个以上 "."
分隔符,效果很好。
例如:“ 1.908.746”
有没有办法做到?
答案 0 :(得分:1)
我建议添加NumberStyles.AllowThousands
public static double ToDoubleOrDefault(this string value) {
var doubleValue = default(double);
// We don't have to create new instances (new CultureInfo()...)
var danishCultureInfo = CultureInfo.GetCultureInfo("da-DK");
var englishCultureInfo = CultureInfo.GetCultureInfo("en-US");
if (double.TryParse(value,
NumberStyles.AllowDecimalPoint,
englishCultureInfo,
out doubleValue))
return doubleValue;
else if (double.TryParse(value,
NumberStyles.AllowDecimalPoint,
danishCultureInfo,
out doubleValue))
return doubleValue;
else if (double.TryParse(value,
NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands,
englishCultureInfo,
out doubleValue))
return doubleValue;
else if (double.TryParse(value,
NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands,
danishCultureInfo,
out doubleValue))
return doubleValue;
return doubleValue;
}
因此,我们尝试将给定的string
视为
123456789.1
123456789,1
123,456,789.1
123.456.789,1
请注意,这里有一个歧义:123.456
是123.456
(英语,因为.
是十进制分隔符)和123456
(丹麦语,因为.
是千分隔符)
答案 1 :(得分:0)
这样您就可以了:
string strNumber = "1.908.746";
double number = double.Parse(strNumber.Replace(".", ""));