2017-02-20 7 views
-6

Я хочу разобрать мою строку, чтобы удвоить. Моя проблема в том, что результат newTime составляет 800, но результат должен быть 8,00.C# как разобрать строку, чтобы удвоить

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

'8,00' не является допустимой двойной – Liam

+2

я получаю' 8', когда я исполняю свой код –

+1

чего вы пытаетесь достичь? Рассчитать количество часов от формата HH: мм? – MadOX

ответ

0

В результате Double.Parse является Double, а не строка. Вам нужно вывести строку из double, используя ToString.

Вы также должны использовать перегрузку Double.Parse, которая имеет параметр NumberStyles. Использование значения Float позволяет обозначать экспоненту.

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

Ваша проблема заключается в том, что ваша культура имеет разный десятичный разделитель на то, что вы создаете в своей строке.

Вы можете изменить его к этому

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

newTime все еще 8. но я хочу 8,00 –

+0

@AH, тогда вы хотите строку. Двойной будет показывать только десятичные знаки, если есть –

1

Если вы хотите, чтобы лечить : как десятичного разделителя, просто сделать это:

string time = "08:00"; 

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

Старайтесь избегать трюки с магическими константами как '.' в time.Replace(':', '.'). Пожалуйста, обратите внимание, что newTime будет 8, а не 8.008 == 8.0 == 8.00 == 8.000...). Если вы хотите представляетnewTime с два знаками после использования десятичной точки форматирования:

// F2 - format string ensures 2 digits after the decimal point 
    // Outcome: 8.00 
    Console.Write(newTime.ToString("F2")); 
Смежные вопросы