more accurate number parsing