您的当前位置:首页正文

printf("%.0lf\n",ans);}} 中 %.0lf什么意思

来源:无忧晚年 2012-04-27

有网友碰到这样的问题“printf("%.0lf\n",ans);}} 中 %.0lf什么意思”。小编为您整理了以下解决方案,希望对您有帮助:

解决方案1:

%lf 是printf函数在输出 double 类型时用到的格式符。
使用 %lf 时,可以在 “%” 和 "lf" 之间指定要输出的 double 类型的【整个数字长度】和【小数部分部分】,他们之间用"."分开,这两部分可以任意一个或者两个都空着不写。
其中【整个数字长度】是包括,整数部分长度,小数部分长度(包括小数点,如有有小数部分的话)一共两个个部分的。
像下面这些写法都是合法的:
(1) %lf
(2) %.lf
(3) %10.lf
(4) %.10lf
(5) %10.10lf
(6) %10lf

为了方便讨论,我们设:
【整个数字输出长度】:len_total
【整数部分输出长度】:len_int
【小数部分输出长度】:len_dec

如果【小数部分指定输出长度】为空(如2,3的情况),那么就会省略掉【小数部分】,只输出【整数部分】。这里 len_dec = 0。

如果【小数部分指定输出长度】缺省(如1,6的情况),那么输出6为小数,不足的部分用“0”补齐。比如有数字123.45,使用“%10lf” ,小数部分的输出为:450000。
这里 len_dec = 6+1=7 。+1是包括小数"."的长度。

如果【小数部分指定输出长度】明确指定(如4,5情况),那么按指定的长度输出【小数部分】,不足部分用“0”补齐。
比如有数字123.45,使用“%.10lf” ,小数部分的输出为:4500000000。
这里 len_dec = 用户指定长度+1。+1是包括小数"."的长度。。

在【小数部分的输出长度】( len_dec)确定下来后,下面决定【整个数字的输出长度】(len_int)。

如果【整个数字的输出长度】( len_total)为空或缺省(如1,2,4的情况),那么会输出完整的整数部分。
如有数字 123456.78,使用 “%.f” 输出,那么整数部分的输出为:123456,实际输出长度为6。
这里len_int = 整数部分实际长度。

如果【整个数字的输出长度】( len_total) 明确指定(如3,5,6的情况) 。那么【整数部分的输出长度】(len_int)为分两种情况讨论:

1)整数部分实际长度 + len_dec >= len_total 。
那么这里len_int = 整数部分实际长度。

比如有数字 123.45 ,使用“%5.4lf”输出,根据上面知道我们得到:
整数部分实际长度:3;
len_dec=5(小数部分输出4500,在加上一个小数点长度);
len_total = 5.
因此:整数部分实际长度 + len_dec >= len_total 成立。
len_int = 整数部分实际长度 = 3.
最后输出:123.4500

2)整数部分实际长度 + len_dec < len_total 。
那么这里len_int = len_total - len_dec,不足部分用空格" "补齐。

比如有数字 123.45 ,使用“%10.4lf”输出,根据上面知道我们得到:
整数部分实际长度:3;
len_dec=5(小数部分输出4500,在加上一个小数点长度);
len_total = 10.
因此:整数部分实际长度 + len_dec < len_total 成立。
len_int = len_total - len_dec = 10 - 5 = 5,也就是说整数部分输出长度为5,而整数部分的实际长度为3,所以要补充:5-3=2个空格进行补齐。
最后输出:" 123.4500"

通过上面的解答,”%.0lf“就很容易理解了,输出的格式为:输出浮点数的整数部分,省略全部小数部分(以及小数点)。比如有数字 123.456,输出:123

解决方案2:

.0表示输出中宽度不限,精度为0, 也就是0位小数
l 这个对f形式的输出类型无影响 没用
f表示为浮点数

解决方案3:

"."后面的是小数精度控制,这里因为是浮点型,则取零代表不显示小数点(取整)不为零时代表最大小数位数。谢谢