// Check the special cases.
if (c == Character.valueOf('I') || c == Character.valueOf('N')) {
c2 = charIterator.next();
c3 = charIterator.next();
if (charIterator.next() != ICharacterIterator.EOS_CHAR) {
throw new SystemException(ErrorCode.FORG0001);
} else if (c == Character.valueOf('I') && c2 == Character.valueOf('N') && c3 == Character.valueOf('F')) {
valueFloat = Float.NEGATIVE_INFINITY;
} else if (c == Character.valueOf('N') && c2 == Character.valueOf('a') && c3 == Character.valueOf('N')) {
valueFloat = Float.NaN;
} else {
throw new SystemException(ErrorCode.FORG0001);
}
} else {
// Read in the number.
do {
if (Character.isDigit(c)) {
value = value * 10 - Character.getNumericValue(c);
if (pastDecimal) {
decimalPlace--;
}
} else if (c == Character.valueOf('.') && pastDecimal == false) {
pastDecimal = true;
} else if (c == Character.valueOf('E') || c == Character.valueOf('e')) {
break;
} else {
throw new SystemException(ErrorCode.FORG0001);
}
} while ((c = charIterator.next()) != ICharacterIterator.EOS_CHAR);
// Parse the exponent.
if (c == Character.valueOf('E') || c == Character.valueOf('e')) {
int moveOffset = 0;
boolean negativeOffset = false;
// Check for the negative sign.
c = charIterator.next();
if (c == Character.valueOf('-')) {
negativeOffset = true;
c = charIterator.next();
}
// Process the numeric value.
do {
if (Character.isDigit(c)) {
moveOffset = moveOffset * 10 + Character.getNumericValue(c);
} else {
throw new SystemException(ErrorCode.FORG0001);
}
} while ((c = charIterator.next()) != ICharacterIterator.EOS_CHAR);
decimalPlace += (negativeOffset ? -moveOffset : moveOffset);
}