22 double multiplier = 1000.0;
23 static const char* SI_endings[] = {
24 "",
"k",
"M",
"G",
"T",
"P",
"E"
26 unsigned int scale = 0;
27 double number_d =
static_cast<double>(number);
28 while (number_d >= multiplier) {
29 number_d /= multiplier;
32 std::ostringstream out;
33 out << std::fixed << std::setprecision(precision) << number_d
34 <<
' ' << SI_endings[scale];
41 double multiplier = 1024.0;
42 static const char* IEC_endings[] = {
43 "",
"Ki",
"Mi",
"Gi",
"Ti",
"Pi",
"Ei"
45 unsigned int scale = 0;
46 double number_d =
static_cast<double>(number);
47 while (number_d >= multiplier) {
48 number_d /= multiplier;
51 std::ostringstream out;
52 out << std::fixed << std::setprecision(precision) << number_d
53 <<
' ' << IEC_endings[scale];
std::string format_iec_units(std::uint64_t number, int precision=3)
Format a byte size using IEC (Ki, Mi, Gi, Ti) suffixes (powers of two).
std::string format_si_units(std::uint64_t number, int precision)
Format number as something like 1 TB.