summaryrefslogtreecommitdiff
path: root/core/string_helpers.hpp
blob: a35448b56f3ac995d9a40ff5988a07b5613ff00b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#ifndef M6lbZdsknZWfvEr3i3hoi7EZO8M
#define M6lbZdsknZWfvEr3i3hoi7EZO8M

#include <math.h>
#include <sstream>
#include <string>

template<int> struct SISuffix { };

const char microSISuffixName[6] = { 'm', '~', 'n', 'p', 'f', 'a' };
const char macroSISuffixName[7] = { 'K', 'M', 'G', 'T', 'P', 'E', 'Y' };

int calcSISuffixId(double val, int base=1000) {
  if (val >= base) return  1 + calcSISuffixId(val / base);
  if (val < 1)     return -1 + calcSISuffixId(val * base);
  return 0;
}

std::string SISuffixify(double val, int base=1000) {
  int id = calcSISuffixId(val, base);
  assert(id >= -6);
  assert(id <= 7);

  std::ostringstream result;

  result << val / pow(base, id) << " ";
  if (id < 0)
    result << microSISuffixName[-id - 1];
  if (id > 0)
    result << macroSISuffixName[ id - 1];

  return result.str();
}


#endif // M6lbZdsknZWfvEr3i3hoi7EZO8M
contact: Jan Huwald // Impressum