【发布时间】:2016-11-08 06:44:00
【问题描述】:
我想将双精度的输出跟踪到小数点后 2 位或更少。考虑以下示例:
#include <stdio.h>
int main() {
printf( "%.2f\n", 2. );
printf( "%.2f\n", 2.5 );
printf( "%.2f\n", 2.25 );
printf( "%.2f\n", 2.125 );
}
输出是
2.00
2.50
2.25
2.12
有什么方法可以打印小于 2 位小数的值,以防需要更少?我的意思是期望的输出是
2
2.5
2.25
2.12
允许使用 iomanip 回答。我专注于 C++,而不是 C,但这个例子是 c-only。
我知道,这通常是不可能的,因为双精度值不精确,但在我的示例中它们是因为所有小数部分都是 2 的幂
【问题讨论】:
-
为什么还需要这个?
-
如果你知道输出,你可以有单独的 setprecision 吗?但是如果你试图检查下一个值是否为 0 然后排除它,那么它是不可能的。
-
示例被构建为最小化。请假设,该值是未知的,但我不想在最后打印无用的零
-
不是很好,但 sprintf 会产生一个字符串,然后手动修剪它...
-
@OmidCompSCI 这是人们经常期望的。袖珍计算器从不输出尾随零