Форматирование строки для преобразования в Double - PullRequest
1 голос
/ 17 августа 2011

Я пытаюсь преобразовать string в double. Входящая строка всегда будет целым числом ... без десятичных знаков. Так, например "90".

double percentToCheck = Convert.ToDouble(String.Format("{0:0.00}", SomeEntity.KeyIDs.SomePercentTrigger));

SomePercentTrigger - это процент, который я буду конвертировать.

Я получаю ошибку "строка не в правильном формате", так как мне отформатировать эту строку? Я должен отформатировать его, потому что если я не получу, я получаю ту же ошибку только с этим во время преобразования:

double percentToCheck = Convert.ToDouble(SomeEntity.KeyIDs.SomePercentTrigger);

ОБНОВЛЕНИЕ:

SomePercentTrigger - это просто string, например, "80" ... это тоже всегда будет целое число.

Ответы [ 3 ]

5 голосов
/ 17 августа 2011

Обновление:
Ваша строка "52.0".

Это должно быть '.', которое вызывает FormatException.
Вы, вероятно, находитесь на машине, где '.' равно , а не установлено в качестве десятичной точки (например, я живув Германии и используйте немецкие региональные настройки. Наша десятичная точка ',')

Чтобы обойти эту проблему, вам нужно проанализировать строку, используя CultureInfo.InvariantCulture.

var value = double.Parse(myString, CultureInfo.InvariantCulture);

InvariantCulture следует использовать для частей вашего приложения, которые вращаются вокруг хранения данных.Убедитесь, что вы используете его также и при преобразовании значений типа double в строки- '), скажем, например, "80%"

Таким образом, вы получаете FormatException в этой строке

double percentToCheck = Convert.ToDouble(String.Format("{0:0.00}", SomeEntity.KeyIDs.SomePercentTrigger));

, потому что {0:0.00} правила форматирования действительны только для числовых значений,

Также здесь вы получите то же исключение:

double percentToCheck = Convert.ToDouble(SomeEntity.KeyIDs.SomePercentTrigger);

, поскольку "80%" не может быть преобразовано в двойное число.

Вы должны либо

  • поместите некоторые записи прямо перед ошибочным оператором
  • или отладьте этот код

и посмотрите, что фактическое содержание SomeEntity.KeyIDs.SomePercentTriggerесть.

2 голосов
/ 17 августа 2011

Нет смысла пытаться отформатировать строку.Вы должны были бы сначала проанализировать это число, чтобы отформатировать его.В любом случае, нет проблемы в разборе числа без десятичных знаков как двойного, поэтому строка, вероятно, не содержит того, что вы думаете.

Если строка содержит число в целочисленном формате, проанализируйте строку какцелое число, а затем преобразовать целое число в двойное число:

double percentToCheck = (double)Int32.Parse(SomeEntity.KeyIDs.SomePercentTrigger);
2 голосов
/ 17 августа 2011

Используйте double.Parse(string) или альтернативно double.TryParse(string, out value)

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