我正在寻找一种在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缓冲区然后手动编辑该缓冲区的方法?
答案 0 :(得分:4)
如果我正确理解了您的问题,则希望5.0
打印为5.0
,5.10
打印为5.1
,5.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