我想将字符串格式的值(如-14.3
)转换为double。
我目前正在使用Convert.ToDouble()
将正值转换为double,但在负十进制值的情况下,它会返回意外结果。对于-14.3
,它会返回-143
。所以在这方面需要一些帮助
private double getDouble(string Value)
{
double result = 0;
try
{
result = Convert.ToDouble(Value);
}
catch (Exception)
{
result = 0;
}
return result;
}
}
答案 0 :(得分:6)
您需要使用NumberFormatInfo
指定用于负号和小数点分隔符的字符。
var format = new NumberFormatInfo();
format.NegativeSign = "-";
format.NumberDecimalSeparator = ".";
var negativeNumber = Double.Parse("-14.3", format); // -14.3
var positiveNumber = Double.Parse("352.6", format); // 352.6
答案 1 :(得分:0)
代替使用Convert.ToDouble函数,请使用:
public static double mtdGetDouble(string Value)
{
if (Value == "" || Value == "-") return 0;
else return Convert.ToDouble(Value);
}
(这是我的风格...)
答案 2 :(得分:0)
如果要将Double.TryParse
与NumberFormatInfo
一起使用,则需要指定NumberStyles.AllowDecimalPoint
和NumberStyles.AllowLeadingSign
。
var format = new NumberFormatInfo();
format.NegativeSign = "-";
format.NumberNegativePattern = 1;
format.NumberDecimalSeparator = ".";
double negativeNumber;
Double.TryParse("-14.3", NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, format, out negativeNumber); // -14.3
double positiveNumber;
Double.TryParse("352.6", NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, format, out positiveNumber); // 352.6