Входная строка имела неверный формат как исправить
Перейти к содержимому

Входная строка имела неверный формат как исправить

Сообщение = Входная строка имеет неправильный формат. в C#

В первом цикле while, который я конвертирую в double, возникает следующее исключение:

Я не уверен, что пишу неправильно или как исправить эту проблему. Я читаю из файла csv. Я протестировал, чтобы убедиться, что данные передаются от переменной к переменной, и это так. данные считываются моим Streamreader и сохраняются в одномерных массивах, которые сохраняются в переменной, которую я использую для сравнения точек данных для определения всех пиков и впадин в наборе данных

Это моя программа:

Первое, что я сделал бы, это запустил это в отладчике и установил прерывание при возникновении этого исключения. Затем вы можете посмотреть значение, которое не удалось проанализировать.

Строка, которую вы пытаетесь преобразовать, не является допустимым двойным значением. Может проблема в культуре? проверьте, есть ли в числах правильный десятичный разделитель, соответствующий языку вашей системы. Запятая или точка.

Формы c голосовым вводом в React с помощью Speechly

Flatpickr: простой модуль календаря для вашего приложения на React

Что такое cURL в PHP? Встроенные функции и пример GET запроса

Ответы 2

Где-то в вашем CSV-файле есть значение, которое нельзя преобразовать в double. Чтобы избежать этого исключения, замените все ваши Convert.ToDouble на Double.TryParse . Это вернет true , если значение может быть проанализировано на double или false , если это невозможно.

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

[NBug] Входная строка имела неверный формат. #6900

The application crashes if the entered value has unexpected format.
E.g. Enter 0.5 instead of 0,5 (wrong decimal delimiter) or any string value.

Expected behaviour

The application correctly parses any decimap delimiter and shows error message if the entered value is not a number.

Steps to reproduce

Open plugin settings menu: Plugins -> Plugin settings
Select the «Find large files» plugin
Enter «0,5» (without quotes) into the «Find large files bigger than (Mb)» edit line.

Error Details

Additional information

Open the Settings dialog for the Find large files plugin.
Enter: 0.5

Environment

  • Git Extensions 3.1.1.6049
  • Build 2f87210
  • Git 2.22.0.windows.1
  • Microsoft Windows NT 10.0.17763.0
  • .NET Framework 4.7.3416.0
  • DPI 96dpi (no scaling)

The text was updated successfully, but these errors were encountered:

gerhardol commented Jul 8, 2019

To parse invariant is common, I can consider this to be a bug.
You get the same message if you enter garbage in the form

This is a shared control, but this seem to be the only where float or double is parsed.
A solution is to use invariant parsing.
Pushed a change, I will not add testcases to this though.

piroxiljin commented Jul 9, 2019 •

@RussKie All localization settings are set to Russian, except the default locale for non-unicode application, which is English (US).

Oh. And decimal separator is comma (,).

RussKie commented Jul 9, 2019

�� A fix maybe to parse like so:

gerhardol commented Jul 9, 2019

The culture is used correctly, you get the exception of you use other culture. Like decimal comma with English.

Invariant parsing can be used, see my commit. But you still get the exception with garbage so not much better. Validation should be done when leaving the text box.

Too much work to give any significant benefit for the complete fix. The invariant is simple but to add tests will be a pain.

Входная строка имеет неправильный формат в double.Parse

Я новичок в C #. Пытаюсь сделать калькулятор, но произошла следующая ошибка:

Входная строка была не в правильном формате.

Это краткое изложение кода:

Как преобразовать строку в двойной тип?

5 ответов

Чего вы пытаетесь достичь с помощью этого кода? Похоже, ваш алгоритм неверен.

Как говорили другие, этот код

Вызовет исключение, потому что пустая строка не может быть преобразована в Double!

Итак, мне интересно, почему вы сбросили свое поле. Я подумал об этом какое-то время, и, может быть, я понял, что ты пытаешься сделать. Допустим, вы вводите число в TextBox1. Затем вы нажимаете кнопку «-», чтобы вычесть, и затем вы хотите ввести второе число, чтобы просмотреть результат. Так ли это? Если это так, то написанный вами код не будет ждать вашего следующего ввода!

Фактически, когда вы нажимаете кнопку, она просто выполняет все написанные вами строки. Я бы написал вместо этого что-нибудь подобное.

РЕДАКТИРОВАТЬ: если строка пуста, это всегда будет вызывать исключения, поэтому я добавил элемент управления. Если строка пуста, значение становится нулевым.

Также помните, что метод Parse для выполнения преобразования полагается на культуру вашей операционной системы, поэтому попробуйте изменить свой код на

Вы также можете использовать

Метод для лучшей обработки исключений.

Поскольку вы очистили текстовое поле в предыдущей строке, преобразование Parse не выполняется.

Как он преобразует String.Empty в Double? Это неправильный способ. Например, если нажата кнопка «+», вы должны проверить, был ли уже номер. Если да, сложите числа и отобразите результат:

Похоже, что значение num2 следует извлекать из textbox2 , а не из textbox1 (вы устанавливаете textbox1.text как empty и пытаетесь разобрать его, чтобы снова удвоить)

Также не используйте Convert.ToDouble(textBox1.Text) напрямую. если пользователи вводят нечисловые значения, ваш код выйдет из строя. сначала проверьте, действительный ли это номер, всегда используйте doube.TryPrase()

Ваш код кажется трудным для понимания того, как используются button_13 и button_14;

Добавить комментарий

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