| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 832 人关注过本帖
标题:初学者请教,小数和指数输出问题,谢谢
只看楼主 加入收藏
colin_zou
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-10-26
收藏
 问题点数:0 回复次数:1 
初学者请教,小数和指数输出问题,谢谢
大家好!我在学习c的课程,有道题是这样的:编写一个程序,读入一个浮点数,并分别以小数形式和指数形式打印。输出应如同下面的格式:
the input is 21.290000 or 2.129000e+001

标准答案是:

PE 3-4

/* Programming Exercise 3-4  */
#include <stdio.h>

int main(void)
{
    float num;
    printf("Enter a floating-point value: ");
    scanf("%f", &num);
    printf("fixed-point notation: %f\n", num);
    printf("exponential notation: %e\n", num);

    return 0;
}

但输出结果是:
Enter a floating-point value: 21.290000
fixed-point notation: 21.290001       为什么呢?
exponential notation: 2.129000e+001


经过我的调整我的程序是这样的:
#include <stdio.h>

int main(void)
{
    double f_i; //定义为double
    scanf("%Lf",&f_i); //接受输入数字,我输入了一个21.290000,类型要用Lf,这个是lo
    printf("the input is %Lf or %e",f_i,f_i); //用大写的L避免误认为是l  E是指数型

    return 0;
}


这样输出就是对的了,
所以不是很理解到底是我编的有问题还是。。。?double应该是%f才是,为什么用了不对,报错,一定要用%Lf
用的是code blocks 10.05 谢谢
搜索更多相关主题的帖子: 课程 学习 include return 
2011-10-26 21:17
绿茶盖儿
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:363
专家分:1852
注 册:2011-9-3
收藏
得分:0 
回复 楼主 colin_zou
从结果看,在你的运行环境下,float型数据的有效位为7位;使用%f格式输出,能输出小数点后的6位
对于21.290000,最后一个0(即小数点后的第六位)为无效位,所以用%f输出时,小数点后的第六位是随机产生的。

而double型数据的有效位是15-16位,21.290000的每一位均为有效位,这样就能准确输出。

double必须用%lf格式输入,但输出可以用%f格式
2011-10-26 23:37
快速回复:初学者请教,小数和指数输出问题,谢谢
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018527 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved