This:
while((nextToken = scan.findInLine("[\\p{L}\\p{N}]+|[-+/\\*^()]")) != null)
will match a string of letters or a string of numeric characters, or one of the punctuation characters; but obviously you want something more complex than a simple string of numeric characters. The following will also match a string of 1 or more numeric characters, followed by a dot, followed by another string of 1 or more numeric characters:
while((nextToken = scan.findInLine("\\p{L}+|\\p{N}+(\\.\\p{N}+)?|[-+/\\*^()]")) != null)
The part in parentheses matches a dot and one or more digits; the ?
after the group means that it's a match if it finds one of these or if it doesn't (i.e. 0 or 1 occurrences of the sub-pattern).