282 {
283 if (precision < 0) {
284
288 }
289
290
291
292 if (precision == 0) {
293 int int_part =
static_cast<int>(
value + 0.5f);
295 stream << int_part;
297 }
298
299
300 int multiplier = 1;
301 for (int i = 0; i < precision; ++i) {
302 multiplier *= 10;
303 }
304
305
306 float scaled_float =
value * multiplier;
307 int scaled;
308 if (scaled_float >= 0) {
309 scaled = static_cast<int>(scaled_float + 0.5f);
310 } else {
311 scaled = static_cast<int>(scaled_float - 0.5f);
312 }
313
314 int int_part = scaled / multiplier;
315 int frac_part = scaled % multiplier;
316
317
318 if (frac_part < 0) {
319 frac_part = -frac_part;
320 }
321
322 sstream stream;
323
324
325 if (
value < 0 && int_part == 0) {
326 stream << "-";
327 }
328 stream << int_part;
329 stream << ".";
330
331
332
333
334
335
336 int temp_multiplier = multiplier / 10;
337 while (temp_multiplier > 0) {
338 int digit = (frac_part / temp_multiplier) % 10;
339 stream << static_cast<char>('0' + digit);
340 temp_multiplier /= 10;
341 }
342
344}
string str() const FL_NOEXCEPT
constexpr int type_rank< T >::value