Я написал простой код Java для приема входных данных с консоли (с использованием Eclipse 2016 IDE), чтобы облегчить перебор текстового файла и вывод файла в структуре операторов SWIFT MT940. Для открытия баланса выписок я использовал метод nextBigDecimal() класса сканера, который раньше работал нормально. Недавно я обновился до версии Eclipse 2023-12 и использую Azul Zulu JRE 1.8, если что-то из этого имеет значение.
Недавно мне пришлось смахнуть пыль со своей программы и отметить, когда я ввожу не десятичное значение (0, 9, 100 и т. д.) работает нормально, но если я ввожу десятичное число (0,00, 99,01 и т. д.), выдается исключение java.util.InputMismatchException. Я прочитал и перечитал документацию о BigDecimal, Scanner , java.util.InputMismatchException и некоторые связанные методы. Обратите внимание, что добавление setScale() не помогает.
Приведенный ниже фрагмент кода приводит к выдаче исключения. Обратите внимание, что я пробовал некоторые другие случайные элементы, например использование запятой в качестве десятичной дроби, поэтому я не думаю, что это какая-то региональная настройка.
Код: Выделить всё
System.out.print("Enter opening balance (Use . for decimal.):\t");
BigDecimal checkBalSign = scan.nextBigDecimal();
Код: Выделить всё
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextBigDecimal(Scanner.java:2740)
at standardbank.TonyDen.Toolbox.MT940_Formatter.initialSetup(MT940_Formatter.java:137)
Код: Выделить всё
String decimalInput = scan.next();
BigDecimal checkBalSign = new BigDecimal(decimalInput);
Note the same instance of Scanner is working fine with other setup input in the same program. I also tried a Scanner.reset() before the nextBigDecimal().
Источник: https://stackoverflow.com/questions/781 ... -exception
Мобильная версия