在c#

时间:2017-04-04 10:38:49

标签: c#

我想将字符串格式的值(如-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;
        }

    }

3 个答案:

答案 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

See the code in action on repl.it

答案 1 :(得分:0)

代替使用Convert.ToDouble函数,请使用:

public static double mtdGetDouble(string Value)
{
    if (Value == "" || Value == "-") return 0;
    else return Convert.ToDouble(Value);
}

(这是我的风格...)

答案 2 :(得分:0)

如果要将Double.TryParseNumberFormatInfo一起使用,则需要指定NumberStyles.AllowDecimalPointNumberStyles.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