注册 登录
编程论坛 C语言论坛

浮点数的输出讨论

朝F 发布于 2019-11-07 14:00, 1851 次点击
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录

#include<stdio.h>
int main()
{
    int count,year;
    float interest,rate,sui=0.05,total;
    printf("请输入你想存多少的钱:\n");
    scanf("%d",&count);
    printf("请输入你想存几年:\n");
    scanf("%d",&year);
    switch(year)
    {
        case 1:
        printf("你想存一年的话rate=1.14那么可以得利息有:\n");
        rate=0.0114;
        interest=count*rate*year*(1-sui);
        break;
        case 2:
        printf("你想存两年的话rate=2.08可得的利息有:\n ");
        rate=0.0208;
        interest=count*rate*year*(1-sui);
        break;
        case 3:
        printf("你想存三年的话rate=3.20可得的利息有:\n ");
        rate=0.0320;
        interest=count*rate*year*(1-sui);
        break;
        case 4:
        printf("你想存四年的话rate=4.15可得的利息有:\n ");
        rate=0.0415;
        interest=count*rate*year*(1-sui);
        break;
    }
   
    total=count+interest;
    printf("那么你可得的利息有%5.1f",interest);
    printf("\n你可得的本金加利息有%-6f",total);
    return 0;
}
我输入count为5000存期为两年,最后一行的输出为5197.600098,那么我问题来了我设置的%-6f
宽度的限制作用去哪了?6个宽度理论不应该输出5197.6吗?后面为啥跟那么多零?
而设置%6.1f时候才输出5197.6,如果我设置%1.1f,最后输出也是5197.6,这又是为啥?
4 回复
#2
自学的数学2019-11-07 14:12
在C语言的输出中,%m.nf意义:1、f表示输出的数据是浮点数;2、n表示输出的数据保留小数点后n为小数,第n+1位四舍五入,若不足n位则补0;3、m表示输出数据在终端设备上占有m个字符,并右对齐,如果实际的位数小于m时,左边用空格补足,如果实际位数大于7时,向右扩展输出。
比如:
printf("%4f\n",123.4);
printf("%2f\n",123.4);
printf("%.4f\n",123.4);
输出结果为:
123.4
123.4
123.4000
#3
纯蓝之刃2019-11-07 14:13
%6.1f。代表输出的整数部分为6,位,小数部分为1位。如果输出的整数部分大于6位,则以实际整数位数为准。所以%-6f,%1.1f的整数部分均小于实际输出的4,所以输出实际位数。
#4
自学的数学2019-11-07 14:17
%-6f表示小数点后面要输出6位小数,也就是5197.600098中的.600098
#5
rjsp2019-11-07 14:58
前面的数仅在输出宽度不足时才起作用,否则的话……,举个例子
printf( "%2.0f", 12345 ) 如果输出 12 的话,那就离谱了

默认小数点后6位,所以
printf( "%-6f\n", 5197.6 );
等同于
printf( "%-6.6f\n", 5197.6 );

我猜你需要的是
printf( "%-6.1f\n", 5197.6 );
1