13    explicit n4(uint64_t v, uint64_t d = 1) : val(v), div(d) {}
 
   14    std::ostream &print(std::ostream &os)
 const {
 
   16        if (val % div && val < div * 100) {
 
   17            if ((v = val * 1000 + div / 2) < div * 1000) {
 
   18                char ofill = os.fill(
'0');
 
   19                os << 
'.' << std::setw(3) << v / div;
 
   23            if ((v = val * 100 + div / 2) < div * 1000) {
 
   24                char ofill = os.fill(
'0');
 
   25                os << val / div << 
'.' << std::setw(2) << (v / div) % 100;
 
   29            if ((v = val * 10 + div / 2) < div * 1000) {
 
   30                os << val / div << 
'.' << (v / div) % 10;
 
   34        v = (val + div / 2) / div;
 
   36            os << std::setw(4) << v;
 
   37        } 
else if (v < UINT64_C(999500)) {
 
   38            os << std::setw(3) << (v + 500) / 1000 << 
'K';
 
   39        } 
else if (v < UINT64_C(9950000)) {
 
   40            v = (v + UINT64_C(50000)) / UINT64_C(100000);
 
   41            os << v / 10 << 
'.' << v % 10 << 
'M';
 
   42        } 
else if (v < UINT64_C(999500000)) {
 
   43            os << std::setw(3) << (v + UINT64_C(500000)) / UINT64_C(1000000) << 
'M';
 
   44        } 
else if (v < UINT64_C(9950000000)) {
 
   45            v = (v + UINT64_C(50000000)) / UINT64_C(100000000);
 
   46            os << v / 10 << 
'.' << v % 10 << 
'G';
 
   47        } 
else if (v < UINT64_C(999500000000)) {
 
   48            os << std::setw(3) << (v + UINT64_C(500000000)) / UINT64_C(1000000000) << 
'G';
 
   49        } 
else if (v < UINT64_C(9950000000000)) {
 
   50            v = (v + UINT64_C(50000000000)) / UINT64_C(100000000000);
 
   51            os << v / 10 << 
'.' << v % 10 << 
'T';
 
   53            os << std::setw(3) << (v + UINT64_C(500000000000)) / UINT64_C(1000000000000) << 
'T';