关于解析:C#如何将字符串解析为double

C# how to parse a string to double

本问题已经有最佳答案,请猛点这里访问。

我想把字符串解析为double。我的问题是,newtime的结果是800,但是结果应该是8,00。

1
2
string time ="08:00";
double newTime = double.Parse(time.Replace(':', '.'));


如果要将:视为十进制分隔符,只需执行以下操作:

1
2
3
4
5
  string time ="08:00";

  // when parsing"time", decimal separator is":"
  double newTime = double.Parse(time,
    new NumberFormatInfo() { NumberDecimalSeparator =":" });

尽量避免使用像time.Replace(':', '.')中的'.'这样的魔法常量。请注意,newTime将是8,而不是8.00(自8 == 8.0 == 8.00 == 8.000...)。如果要用小数点后两位数字表示newTime,请使用格式:

1
2
3
  // F2 - format string ensures 2 digits after the decimal point
  // Outcome: 8.00
  Console.Write(newTime.ToString("F2"));


您的问题是,您的区域性与您在字符串中创建的内容具有不同的十进制分隔符。

你可以把它改成这个

1
2
string time ="08:00";
double newTime = double.Parse(time.Replace(":", Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator) );


1
2
string time ="08:00";
double newTime = double.Parse(time.Replace(':', '.'),  CultureInfo.InvariantCulture);

Double.Parse的结果是Double而不是字符串。您需要使用ToString从double输出一个字符串。

您还应该使用具有NumberStyles参数的Double.Parse重载。使用Float值允许指数记数法。