From: Bert Vermeulen Date: Tue, 16 Oct 2012 12:03:40 +0000 (+0200) Subject: analog: sane printing of very small and negative values X-Git-Tag: dsupstream~662 X-Git-Url: https://sigrok.org/gitweb/?p=libsigrok.git;a=commitdiff_plain;h=d713e561814558d9f07c4186aef35a23df8b8445 analog: sane printing of very small and negative values --- diff --git a/output/analog.c b/output/analog.c index 3049ba73..d1fd7be6 100644 --- a/output/analog.c +++ b/output/analog.c @@ -63,21 +63,27 @@ static int init(struct sr_output *o) static void si_printf(float value, GString *out, char *unitstr) { + float v; - if (value > 1000000000L) - g_string_append_printf(out, "%f G%s", value / 1000000000L, unitstr); - else if (value > 1000000) - g_string_append_printf(out, "%f M%s", value / 1000000, unitstr); - else if (value > 1000) - g_string_append_printf(out, "%f k%s", value / 1000, unitstr); - else if (value < 0.000000000001) - g_string_append_printf(out, "%f p%s", value * 1000000000000, unitstr); - else if (value < 0.000000001) - g_string_append_printf(out, "%f n%s", value * 1000000000, unitstr); - else if (value < 0.000001) - g_string_append_printf(out, "%f u%s", value * 1000000, unitstr); - else if (value < 0.001) - g_string_append_printf(out, "%f m%s", value * 1000, unitstr); + if (signbit(value)) + v = -(value); + else + v = value; + + if (v < 1e-12 || v > 1e+12) + g_string_append_printf(out, "%f %s", value, unitstr); + else if (v > 1e+9) + g_string_append_printf(out, "%f G%s", value / 1e+9, unitstr); + else if (v > 1e+6) + g_string_append_printf(out, "%f M%s", value / 1e+6, unitstr); + else if (v > 1e+3) + g_string_append_printf(out, "%f k%s", value / 1e+3, unitstr); + else if (v < 1e-9) + g_string_append_printf(out, "%f n%s", value * 1e+9, unitstr); + else if (v < 1e-6) + g_string_append_printf(out, "%f u%s", value * 1e+6, unitstr); + else if (v < 1e-3) + g_string_append_printf(out, "%f m%s", value * 1e+3, unitstr); else g_string_append_printf(out, "%f %s", value, unitstr);