C中带printf的点后至少十进制小数

时间:2019-04-10 08:12:56

标签: c string printing terminal printf

我正在寻找一种在C中打印浮点数的方法,该浮点数在点后至少打印至少小数点后十进制,但仍会截断尾随的零,例如

double x = 5.0;
printf("<some_format>", x);
// should print 5.0, not 5, and not 5.000000

double y = 5.10;
printf("<same_format>", y);
// should print 5.1, not 5.10, and not 5.100000

double x = 5.1230;
printf("<same_format>", z);
// should print 5.123, not 5.1230

另外,定义最大或固定数目的数字/小数正是我要避免的事情。

有人知道用printf完成此操作的一种格式,而无需诉诸将数字写入char缓冲区然后手动编辑该缓冲区的方法?

1 个答案:

答案 0 :(得分:4)

如果我正确理解了您的问题,则希望5.0打印为5.05.10打印为5.15.15打印为{{ 1}} ...

没有简单的方法可以使用5.15实现此目的,因为问题并不那么简单:printf在C中用5.10表示,其二进制编码的小数部分是double的近似值,而不是精确的表示形式。如果使用足够的小数位数打印它,您将看到它不再产生尾随零:

5.1

所以您的问题应该是:

  

如何打印至少包含 printf("%.23f", 5.10) -> 5.09999999999999999991326 但不超过n个小数的浮点数,并省略尾随的零?

这可以通过以下方式实现:通过将p作为p%f的精度字段,并运行循环以删除sprintf之后的尾随零,如果{ {1}}是n

这里是一个例子:

n