A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sxakljf 中级黑马   /  2015-5-29 20:15  /  1328 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

#include <stdio.h>

int main() {

    float ljf2 = 3.456;
   
    printf("ljf2 = %2f\n",ljf2);
   
    printf("ljf2 = %5.3f\n",ljf2);
   
    printf("ljf2 = %5f\n",ljf2);
   
    return 0;
}

12 个回复

倒序浏览
查一下笔记,域宽和精度的问题.
回复 使用道具 举报
hi虚无缥缈 发表于 2015-5-29 21:12
查一下笔记,域宽和精度的问题.

#include <stdio.h>

int main() {

    float ljf2 = 3.456;
   
    printf("ljf2 = %2f\n",ljf2);
   
    printf("ljf2 = %5.3f\n",ljf2);
   
    printf("ljf2 = %5f\n",ljf2);
   
    return 0;
}
//只有同时限定总位数与小数位数才能正常显示
回复 使用道具 举报
printf("ljf2 = %5.3f\n",ljf2)
表示输出的float类型至少占5个字节,且有3位小数
回复 使用道具 举报
好吧,学习了
回复 使用道具 举报
float默认显示6位小数,如果想要限定位数,就在%.xf(.x)就是要限定显示出来的值。也是找别人帮忙才知道的
回复 使用道具 举报
任伟 中级黑马 2015-5-30 12:43:51
7#
float 是不精确的浮点数,因此很多要求精确的数学常识在float上不成立.

举例: 假设 a b c 都是 int
那么  a+b+c 和 c+b+a 的结果永远是相等的(哪怕溢出了也相等)
而如果 a b c 都是float,则上面算式是不成立的
两个的计算结果很可能不一样(但是误差为机器0, 在64位上误差比32位小得多)
也就是  0.4999+0.5001 有可能等于 1 也有可能等于0.99999999999998 或者 1.00000000001
回复 使用道具 举报
任伟 中级黑马 2015-5-31 13:27:17
8#
好好的学习一下视频吧
回复 使用道具 举报
学习学习!
回复 使用道具 举报
float是单精度类型,它的有效值一共是七位,小数后有效值最多是6位,不足的补0;还有printf函数中%m.nf的意思是输出一个float类型的实数,要求一共有m位,小数位要有n位。
回复 使用道具 举报
m.nf   m表示总位数,n表示小数点后位数
回复 使用道具 举报
%f输出默认的6位小数,如果不够6位,打0 .
//只打印n位小数,四舍五入 则用printf(“%.nf,f1”)
  %m.nf
    M表示总的位数(列数)。N表示小数点后的位数
%f打印出来后,float小数点后精度是6位,有效数字是7位。
%f打印出来后,double小数点后精度是6位,有效数字是15位。
后边的打不出来,是随机的。
回复 使用道具 举报
视频上说的很清楚啊,m.nf   m表示总位数,n表示小数点后位数
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马