There are only 3 primitive-parsing methods that need this logic (int, short,long). As per your suggestion I tried adding a common precision checking function but it felt icky because:
1) As a common function, primitive vals would be upcast into Number objects to perform this often unnecessary check
2) You'd also need to pass the results of doDoubleValue() (unecessarily in the all default coerce==true cases) or have the utility function perform this call for you when required which means it only ever works as a utility function when you happen to be positioned at the right point in the parser.
Either way it felt worse than the existing logic.