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


[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.
Входная строка имела неверный формат
Программа читает файл и печатает содержимое на экран.
Но при попытке запустить PascalABC.NET говорит:
В чем может быть ошибка? Содержимое входного файла:
Рискну предположить, что readln гордо считал «mynamw 334» в s , и дальше не смог найти ничего похожего на i . Откуда ему знать, где заканчивается ваша строка и есть ли в ней пробелы? Попробуйте заменить это на просто readln(f, s); i := 100; и посмотреть, что будет.
Итак, проблему нашли. А можно переставить местами данные:
Если да, то всё получится с readln(f, i, s); .
Поскольку мы решили не менять формат, задача становится сложнее 🙂 Я бы считал всю строку в строковую переменную ( readln(f, line); ), а дальше нашёл бы в ней последний пробел (поиском с конца) и разделил по нему на s (подстрока от начала до позиции найденного пробела) и i (остаток строки, перевести в число с помощью StrToInt ). Понятно, как?
Входная строка имела неверный формат как исправить
![]()
Лучший отвечающий
Вопрос
Всё работало. Переустановил Windows, Ту же самую поставил. Та же VS 2015 всё то же. Но перестала работать программа.
Ругается на эту строчку
Ещё — раньше не было Azure SDK сейчас добавил ещё Azure SDK — из-за неё что-ли?
Ответы
Скорее всего строка неверная. Может там точка вместо запятой, а может наоборот. Требуемый формат зависит от текущей культуры, видимо она подменялась после переустановки ОС.
Так что проверяйте строку и культуру.
This posting is provided "AS IS" with no warranties, and confers no rights.
- Помечено в качестве ответа DevingAs 1 марта 2016 г. 17:20
Центры разработки
- Windows
- Office
- Visual Studio
- Microsoft Azure
- Дополнительно.
Обучение
- Microsoft Virtual Academy
- Канал Channel 9
- Журнал MSDN
Сообщество
- Новости
- Форумы
- Блоги
- Codeplex
Свяжитесь с нами
Программы
- BizSpark (для стартапов)
- Microsoft Imagine (for students)
- Информационный бюллетень
- Конфиденциальность и файлы cookie
- Условия использования
- Товарные знаки
© 2023 Microsoft
Входная строка имеет неправильный формат в double.Parse
Я новичок в C #. Пытаюсь сделать калькулятор, но произошла следующая ошибка:
Входная строка была не в правильном формате.
Это краткое изложение кода:
Как преобразовать строку в двойной тип?
5 ответов
Чего вы пытаетесь достичь с помощью этого кода? Похоже, ваш алгоритм неверен.
Как говорили другие, этот код
Вызовет исключение, потому что пустая строка не может быть преобразована в Double!
Итак, мне интересно, почему вы сбросили свое поле. Я подумал об этом какое-то время, и, может быть, я понял, что ты пытаешься сделать. Допустим, вы вводите число в TextBox1. Затем вы нажимаете кнопку «-», чтобы вычесть, и затем вы хотите ввести второе число, чтобы просмотреть результат. Так ли это? Если это так, то написанный вами код не будет ждать вашего следующего ввода!
Фактически, когда вы нажимаете кнопку, она просто выполняет все написанные вами строки. Я бы написал вместо этого что-нибудь подобное.
РЕДАКТИРОВАТЬ: если строка пуста, это всегда будет вызывать исключения, поэтому я добавил элемент управления. Если строка пуста, значение становится нулевым.
Поскольку вы очистили текстовое поле в предыдущей строке, преобразование Parse не выполняется.