prf.c: fix wrong results with %g conversion
The precision parameter to the %g conversion indicates the maximum number of significant digits and not the number of digits to appear after the radix character. Here's a few examples this patch fixes: expected before ---------------------------------------------------------- printf("%.3g", 150.12) 150 150.12 printf("%.2g", 150.1) 1.5e+02 150.1 printf("%#.3g", 150.) 150. 150.000 printf("%#.2g", 15e-5) 0.00015 0.00 printf("%#.4g", 1505e-7) 0.0001505 0.0002 printf("%#.4g", 1505e-8) 1.505e-05 1.5050e-05 Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
This commit is contained in:
parent
132a286c39
commit
90ec5360be
2 changed files with 39 additions and 5 deletions
|
@ -61,7 +61,7 @@ union raw_double_u {
|
|||
|
||||
void test_sprintf_double(void)
|
||||
{
|
||||
char buffer[100];
|
||||
char buffer[400];
|
||||
union raw_double_u var;
|
||||
|
||||
#ifndef CONFIG_FLOAT
|
||||
|
@ -284,6 +284,36 @@ void test_sprintf_double(void)
|
|||
zassert_true((strcmp(buffer, "1.234E+09") == 0),
|
||||
"sprintf(1.234E+09) - incorrect "
|
||||
"output '%s'\n", buffer);
|
||||
|
||||
var.d = 150.0;
|
||||
sprintf(buffer, "%#.3g", var.d);
|
||||
zassert_true((strcmp(buffer, "150.") == 0),
|
||||
"sprintf(150.) - incorrect "
|
||||
"output '%s'\n", buffer);
|
||||
|
||||
var.d = 150.1;
|
||||
sprintf(buffer, "%.2g", var.d);
|
||||
zassert_true((strcmp(buffer, "1.5e+02") == 0),
|
||||
"sprintf(1.5e+02) - incorrect "
|
||||
"output '%s'\n", buffer);
|
||||
|
||||
var.d = 150.567;
|
||||
sprintf(buffer, "%.3g", var.d);
|
||||
zassert_true((strcmp(buffer, "151") == 0),
|
||||
"sprintf(151) - incorrect "
|
||||
"output '%s'\n", buffer);
|
||||
|
||||
var.d = 15e-5;
|
||||
sprintf(buffer, "%#.3g", var.d);
|
||||
zassert_true((strcmp(buffer, "0.000150") == 0),
|
||||
"sprintf(0.000150) - incorrect "
|
||||
"output '%s'\n", buffer);
|
||||
|
||||
var.d = 1505e-7;
|
||||
sprintf(buffer, "%.4g", var.d);
|
||||
zassert_true((strcmp(buffer, "0.0001505") == 0),
|
||||
"sprintf(0.0001505) - incorrect "
|
||||
"output '%s'\n", buffer);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue