diff --git a/cgminer.c b/cgminer.c index 3f23cd9a..3094c2a1 100644 --- a/cgminer.c +++ b/cgminer.c @@ -1471,6 +1471,7 @@ static void suffix_string(uint64_t val, char *buf, int sigdigits) const uint64_t peta = 1000000000000000ull; const uint64_t exa = 1000000000000000000ull; char suffix[2] = ""; + bool decimal = true; double dval; if (val >= exa) { @@ -1496,15 +1497,20 @@ static void suffix_string(uint64_t val, char *buf, int sigdigits) } else if (val >= kilo) { dval = (double)val / dkilo; sprintf(suffix, "K"); - } else + } else { dval = val; + decimal = false; + } - if (!sigdigits) - sprintf(buf, "%d%s", (unsigned int)dval, suffix); - else { + if (!sigdigits) { + if (decimal) + sprintf(buf, "%.1f%s", dval, suffix); + else + sprintf(buf, "%d%s", (unsigned int)dval, suffix); + } else { /* Always show sigdigits + 1, padded on right with zeroes * followed by suffix */ - int ndigits = (sigdigits - 1 - floor(log10 (dval))); + int ndigits = sigdigits - 1 - (dval > 0.0 ? floor(log10(dval)) : 0); sprintf(buf, "%*.*f%s", sigdigits + 1, ndigits, dval, suffix); }