C #> Преобразовать строку в двойную, когда input = "" - PullRequest
1 голос
/ 16 февраля 2011

Я хотел бы преобразовать строку в двойную (очень простой вопрос, не так ли?)

string input = "45.00000";
double numberd = Double.Parse(input, CultureInfo.InvariantCulture);

=> мой код работает, и я очень счастлив.

Однако у меня может быть следующее

string input = "";
double numberd = Double.Parse(input, CultureInfo.InvariantCulture);

В этом случае мой код не работает, и я получаю ошибку исключения; ( Интересно, как мне справиться с такой ситуацией. В идеале, когда я получу это, я бы хотел, чтобы моя переменная numberd была равна нулю.

Кто-нибудь может мне помочь? Thx

Ответы [ 7 ]

5 голосов
/ 16 февраля 2011

Microsoft рекомендует использовать шаблон Tester-Doer следующим образом:

string input = "";
double numberd;
if( Double.TryParse(input, out numberd) )
{
    // number parsed!
}
3 голосов
/ 16 февраля 2011

Используйте Double для анализа, но Double? для хранения значения, возможно?

Double number;
string input = ""; // just for demo purpose, naturally ;o)
Double? nullableNumber = 
    Double.TryParse(input, NumberStyles.Any, CultureInfo.InvariantCulture, out number) 
    ? (Double?)number 
    : null;

// use nullableNumber
1 голос
/ 16 февраля 2011

Почему бы просто не перехватить исключение и не установить свою переменную?

double numberd;
try {
  numberd = Double.Parse(input, CultureInfo.InvariantCulture);
} catch (System.FormatException e)
  numberd = 0.0;
}

В качестве альтернативы вы можете использовать Double.TryParse

1 голос
/ 16 февраля 2011

Примитивные типы, такие как double, не могут быть нулевыми.У вас может быть версия с нулевым значением double?, но Double.Parse не возвращает double? (просто double).

Вы можете использовать Double.TryParse ипроверьте условие возврата и установите double? на ноль соответственно, если это подойдет лучше.

0 голосов
/ 25 апреля 2013

Как насчет

Double? numberd = String.IsNullOrEmpty(str) ? null : Double.Parse(str)

В моем приложении я анализирую файлы CSV и хочу, чтобы эти пустые строки были равны нулю, поэтому я возвращаю 0.0 вместо нуля, и это все хорошо.

5 больше

0 голосов
/ 16 февраля 2011

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

Double? numberd = (input.Length == 0) ? null : (Double?)Double.Parse(input, CultureInfo.InvariantCulture);

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

0 голосов
/ 16 февраля 2011

Добавить оператор if, сравнивающий строки или окружение с блоком try / catch.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...