我正在尝试将此字符串转换为double
Convert.ToDouble("1.12");
这是输出
System.FormatException未处理。
我应该这样做吗?
public static double ConvertToDouble(string ParseVersion)
{
double NewestVersion;
try
{
NewestVersion = Convert.ToDouble(ParseVersion);
}
catch
{
ParseVersion = ParseVersion.Replace('.', ',');
NewestVersion = Convert.ToDouble(ParseVersion);
}
return NewestVersion;
}
ConvertToDouble("1.12");
或者是否有更简单的解决方案?
答案 0 :(得分:26)
double.Parse
将使用当前文化。听起来你想要不变的文化:
double d = double.Parse("1.12", CultureInfo.InvariantCulture);
编辑:为了清楚起见,显然如果你试图解析用户在不同文化中输入的文本,你不应该使用它。当您在的不变文化中收到数据时(这是大多数基于机器到机器的数据文本格式),并且希望在解析时强制执行此操作时,可以使用此选项。
答案 1 :(得分:3)
您不必将.
替换为,
..但更好的方法是使用.net TryParse
方法,如:
double d;
if (double.TryParse("your string data", out d)
{
Console.WriteLine(d);
}
修改:另请注意,将.
替换为,
会导致错误的结果,例如1.12
:
double d = double.Parse(1.12);//d will equals to 1.12
double d = double.Parse(1,12);//d will equals to 112.0
答案 2 :(得分:2)
Convert.ToDouble在内部使用Double.Parse。如果您不确定文化背景,您应该使用Double.Parse的重载来精确培养文化:
double d = double.Parse("1.12", CultureInfo.InvariantCulture);
答案 3 :(得分:0)
请记住,此问题可能取决于输入字符串的来源。如果从数据库中读取它作为对象,您可以通过将其保存为对象并使用Convert.ToDouble()来解决您的问题,如下所示:
public double Double_fromObject(object obj)
{
double dNum = 0.0;
if (obj.ToString() != string.Empty) // the Convert fails when ""
{
try
{
dNum = Convert.ToDouble(obj);
}
catch (SystemException sex)
{
// this class's error string
LastError = sex.Message;
}
}
return (dNum);
}