{"record":{"id":"f57be88049c527e4","repo":"TheAlgorithms/Java","slug":"unexpected-word-after-point","errorCode":"UNEXPECTED_WORD_AFTER_POINT","errorMessage":"Invalid Input. Unexpected Word (after Point): {word}","messagePattern":"Invalid Input\\. Unexpected Word \\(after Point\\): (.+?)","errorType":"exception","errorClass":"WordsToNumberException","httpStatus":null,"severity":"error","filePath":"src/main/java/com/thealgorithms/conversions/WordsToNumber.java","lineNumber":287,"sourceCode":"        return isNegative ? completeNumber.multiply(BigDecimal.valueOf(-1))\n                :\n                    completeNumber;\n                }\n\n                private static boolean isAdditionSafe(BigDecimal currentChunk, BigDecimal number) {\n                    int chunkDigitCount = currentChunk.toString().length();\n                    int numberDigitCount = number.toString().length();\n                    return chunkDigitCount > numberDigitCount;\n                }\n\n                private static String convertDecimalPart(ArrayDeque<String> wordDeque) {\n                    StringBuilder decimalPart = new StringBuilder(\".\");\n\n                    while (!wordDeque.isEmpty()) {\n                        String word = wordDeque.poll();\n                        Integer number = NumberWord.getValue(word);\n                        if (number == null) {\n                            throw new WordsToNumberException(WordsToNumberException.ErrorType.UNEXPECTED_WORD_AFTER_POINT, word);\n                        }\n                        decimalPart.append(number);\n                    }\n\n                    boolean missingNumbers = decimalPart.length() == 1;\n                    if (missingNumbers) {\n                        throw new WordsToNumberException(WordsToNumberException.ErrorType.MISSING_DECIMAL_NUMBERS, \"\");\n                    }\n                    return decimalPart.toString();\n                }\n\n                private static BigDecimal combineChunks(List<BigDecimal> chunks) {\n                    BigDecimal completeNumber = BigDecimal.ZERO;\n                    for (BigDecimal chunk : chunks) {\n                        completeNumber = completeNumber.add(chunk);\n                    }\n                    return completeNumber;\n                }","sourceCodeStart":269,"sourceCodeEnd":305,"githubUrl":"https://github.com/TheAlgorithms/Java/blob/fdfb9a395b310167a66bd29e311e36e0e3e9b964/src/main/java/com/thealgorithms/conversions/WordsToNumber.java#L269-L305","documentation":"Thrown in convertDecimalPart (invoked after 'point') when a word following 'point' is not a recognized NumberWord. The decimal part expects a sequence of single-digit number words (zero-nine); any other word — including tens words, 'hundred', 'point', or unknown words — triggers this error.","triggerScenarios":"convert('one point five two') works; convert('one point twenty') fails (twenty is not single-digit); convert('one point hundred') fails; convert('one point five point') fails.","commonSituations":"Users trying to spell decimals with multi-digit words ('point twenty-five' instead of 'point two five'); unsupported decimal word forms; LLM output mixing scales after 'point'.","solutions":["After 'point', use only single-digit words: zero through nine, one per decimal place.","Spell multi-digit decimals digit by digit: 'point two five' not 'point twenty five'.","Pre-validate the post-'point' segment contains only zero-nine words."],"exampleFix":"// before\nWordsToNumber.convert('one point twenty five');\n// after\nWordsToNumber.convert('one point two five'); // 1.25","handlingStrategy":"validation","validationCode":"static final Set<String> DIGITS = Set.of(\"zero\",\"one\",\"two\",\"three\",\"four\",\"five\",\"six\",\"seven\",\"eight\",\"nine\");\nstatic boolean decimalPartValid(String s) {\n    int p = s.toLowerCase(Locale.ROOT).indexOf(\"point\");\n    if (p < 0) return true;\n    String[] after = s.substring(p).trim().split(\"[ ,-]+\");\n    for (int i = 1; i < after.length; i++) { if (!DIGITS.contains(after[i])) return false; }\n    return true;\n}","typeGuard":null,"tryCatchPattern":"try { WordsToNumber.convert(input); } catch (WordsToNumberException e) {\n    if (e.errorType == ErrorType.UNEXPECTED_WORD_AFTER_POINT) throw new ApiException(400, \"After 'point', only single-digit words (zero-nine) are allowed\");\n    throw e;\n}","preventionTips":["After 'point', use only single-digit words (zero-nine).","Spell decimals digit by digit, one word per place.","Never use tens words, 'hundred', or 'point' again after the first 'point'."],"tags":["java","words-to-number","grammar","decimal"],"backgroundTag":null,"analyzedSha":"fdfb9a395b310167a66bd29e311e36e0e3e9b964","analyzedAt":"2026-08-13T23:36:13.315Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}