54 const double MAX_FLOAT_AS_DOUBLE_ROUNDED = 3.4028235677973366e+38;
66 int size = sprintf(temp,
"%.1f", 1.5);
74 result.append(
input, radix_pos);
75 result.append(temp + 1,
size - 2);
76 result.append(radix_pos + 1);
90 double result = strtod(text, &temp_endptr);
91 if (original_endptr !=
NULL) *original_endptr = temp_endptr;
92 if (*temp_endptr !=
'.')
return result;
97 std::string localized = LocalizeRadix(text, temp_endptr);
98 const char* localized_cstr = localized.c_str();
99 char* localized_endptr;
100 result = strtod(localized_cstr, &localized_endptr);
101 if ((localized_endptr - localized_cstr) > (temp_endptr - text)) {
104 if (original_endptr !=
NULL) {
106 int size_diff = localized.size() - strlen(text);
108 *original_endptr =
const_cast<char*
>(
109 text + (localized_endptr - localized_cstr - size_diff));
119 if (
value > std::numeric_limits<float>::max()) {
127 if (
value <= MAX_FLOAT_AS_DOUBLE_ROUNDED) {
128 return std::numeric_limits<float>::max();
130 return std::numeric_limits<float>::infinity();
131 }
else if (
value < -std::numeric_limits<float>::max()) {
132 if (
value >= -MAX_FLOAT_AS_DOUBLE_ROUNDED) {
133 return -std::numeric_limits<float>::max();
135 return -std::numeric_limits<float>::infinity();
137 return static_cast<float>(
value);