- if (v_srat.denominator)
- snprintf (b, sizeof (b), ", %2.2f",
- (double)v_srat.numerator / v_srat.denominator);
- else
- snprintf (b, sizeof (b), ", %li/%li",
- (long) v_srat.numerator,
- (long) v_srat.denominator);
- strncat (val, b, maxlen);
- maxlen -= strlen (b);
- if ((signed) maxlen <= 0) break;
+ if (v_srat.denominator) {
+ int decimals = (int)(log10(fabs(v_srat.denominator))-0.08+1.0);
+ snprintf (val+len, maxlen-len, "%2.*f",
+ decimals,
+ (double) v_srat.numerator /
+ (double) v_srat.denominator);
+ } else
+ snprintf (val+len, maxlen-len, "%li/%li",
+ (long) v_srat.numerator,
+ (long) v_srat.denominator);
+ len += strlen (val+len);
+ if (len >= maxlen-1) break;