19template <
typename Float>
20bool Writer::FormatFixedText(Float value, uint8_t precision,
bool alternate,
char* out,
23 Float rounded = RoundDecimal(value, precision);
24 if (!std::isfinite(rounded))
28 auto normalized = NormalizeDecimal(rounded);
29 int integer_exponent = (rounded == 0) ? 0 : normalized.exponent;
30 int start_pos = (integer_exponent > 0) ? integer_exponent : 0;
31 Float scale = Power10<Float>(start_pos);
34 for (
int pos = start_pos; pos >= 0; --pos)
36 if (!AppendBufferChar(out, float_buffer_capacity, out_size,
37 static_cast<char>(
'0' + ExtractDigit(rounded, scale))))
44 if (precision != 0 || alternate)
46 if (!AppendBufferChar(out, float_buffer_capacity, out_size,
'.'))
52 for (uint8_t i = 0; i < precision; ++i)
54 if (!AppendBufferChar(out, float_buffer_capacity, out_size,
55 static_cast<char>(
'0' + ExtractDigit(rounded, scale))))