mirror of
https://github.com/fmtlib/fmt.git
synced 2024-11-19 20:18:49 +00:00
Stop the orgy of casts
This commit is contained in:
parent
37dc495b9d
commit
0497875ff3
@ -539,7 +539,7 @@ FMT_FUNC bool grisu2_gen_digits(
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct gen_digits_params {
|
struct gen_digits_params {
|
||||||
unsigned num_digits;
|
int num_digits;
|
||||||
bool fixed;
|
bool fixed;
|
||||||
bool upper;
|
bool upper;
|
||||||
bool trailing_zeros;
|
bool trailing_zeros;
|
||||||
@ -617,11 +617,11 @@ struct fill {
|
|||||||
// The number is given as v = f * pow(10, exp), where f has size digits.
|
// The number is given as v = f * pow(10, exp), where f has size digits.
|
||||||
template <typename Handler>
|
template <typename Handler>
|
||||||
FMT_FUNC void grisu2_prettify(const gen_digits_params ¶ms,
|
FMT_FUNC void grisu2_prettify(const gen_digits_params ¶ms,
|
||||||
ptrdiff_t size, int exp, Handler &&handler) {
|
int size, int exp, Handler &&handler) {
|
||||||
if (!params.fixed) {
|
if (!params.fixed) {
|
||||||
// Insert a decimal point after the first digit and add an exponent.
|
// Insert a decimal point after the first digit and add an exponent.
|
||||||
handler.insert(1, '.');
|
handler.insert(1, '.');
|
||||||
exp += static_cast<int>(size) - 1;
|
exp += size - 1;
|
||||||
if (size < params.num_digits)
|
if (size < params.num_digits)
|
||||||
handler.append(params.num_digits - size, '0');
|
handler.append(params.num_digits - size, '0');
|
||||||
handler.append(params.upper ? 'E' : 'e');
|
handler.append(params.upper ? 'E' : 'e');
|
||||||
@ -629,13 +629,12 @@ FMT_FUNC void grisu2_prettify(const gen_digits_params ¶ms,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// pow(10, full_exp - 1) <= v <= pow(10, full_exp).
|
// pow(10, full_exp - 1) <= v <= pow(10, full_exp).
|
||||||
int int_size = static_cast<int>(size);
|
int full_exp = size + exp;
|
||||||
int full_exp = int_size + exp;
|
|
||||||
const int exp_threshold = 21;
|
const int exp_threshold = 21;
|
||||||
if (int_size <= full_exp && full_exp <= exp_threshold) {
|
if (size <= full_exp && full_exp <= exp_threshold) {
|
||||||
// 1234e7 -> 12340000000[.0+]
|
// 1234e7 -> 12340000000[.0+]
|
||||||
handler.append(full_exp - int_size, '0');
|
handler.append(full_exp - size, '0');
|
||||||
int num_zeros = static_cast<int>(params.num_digits) - full_exp;
|
int num_zeros = params.num_digits - full_exp;
|
||||||
if (num_zeros > 0 && params.trailing_zeros) {
|
if (num_zeros > 0 && params.trailing_zeros) {
|
||||||
handler.append('.');
|
handler.append('.');
|
||||||
handler.append(num_zeros, '0');
|
handler.append(num_zeros, '0');
|
||||||
|
Loading…
Reference in New Issue
Block a user