| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1364 人关注过本帖
标题:[讨论]书本中问题
取消只看楼主 加入收藏
C语言学习者
Rank: 4
等 级:贵宾
威 望:13
帖 子:1278
专家分:0
注 册:2006-9-26
收藏
 问题点数:0 回复次数:6 
[讨论]书本中问题

请编一个函数float fun(double h),函数的功能是对变量h中的值保留2位小数,并对第三位进行四舍五入(规定h中的值为正数)。
例如:h值为8.32433,则函数返回8.32, h值8.32533,则函数返回8.33。
#include<stdio.h>
float fun(float h)
{ long t;
h*=1000;
t=(h+5)/10;
return(float)t/100;
}

void main()
{
float a;
printf("Enter a:");
scanf("%f",&a);
printf("The original data is:");
printf("%f\n\n",a);
printf("The result:%10.2f\n",fun(a));
}
算法不错,不过输入123456.123456,那么它显示123456.13,本人认为浮点范围所限制,即是机器问题,还有
把它程序变为这样:
#include<stdio.h>
float fun(float h)
{ long t;
h*=1000;
t=h+5;
return(float)t/1000;
}

void main()
{
float a;
printf("Enter a:");
scanf("%f",&a);
printf("The original data is:");
printf("%f\n\n",a);
printf("The result:%10.2f\n",fun(a));
}

如果输入0。122222,那么它输出0。13,为什么?

搜索更多相关主题的帖子: float 书本 printf 函数 
2006-09-28 10:38
C语言学习者
Rank: 4
等 级:贵宾
威 望:13
帖 子:1278
专家分:0
注 册:2006-9-26
收藏
得分:0 

我问题是
#include<stdio.h>
float fun(float h)
{ long t;
h*=1000;
t=h+5;
return(float)t/1000;
}

void main()
{
float a;
printf("Enter a:");
scanf("%f",&a);
printf("The original data is:");
printf("%f\n\n",a);
printf("The result:%10.2f\n",fun(a));
}

如果输入0。122222,那么它输出0。13,为什么?


谁有强殖装甲第二部,可以Q我460054868
2006-09-28 12:52
C语言学习者
Rank: 4
等 级:贵宾
威 望:13
帖 子:1278
专家分:0
注 册:2006-9-26
收藏
得分:0 
有什么人解答这问题啊

谁有强殖装甲第二部,可以Q我460054868
2006-09-28 19:26
C语言学习者
Rank: 4
等 级:贵宾
威 望:13
帖 子:1278
专家分:0
注 册:2006-9-26
收藏
得分:0 
我知道,这转换是吞这些位,但没有理由有进位。

谁有强殖装甲第二部,可以Q我460054868
2006-09-28 19:32
C语言学习者
Rank: 4
等 级:贵宾
威 望:13
帖 子:1278
专家分:0
注 册:2006-9-26
收藏
得分:0 
以下是引用C之Itachi在2006-9-28 21:13:13的发言:

第2个发错了`
main()
{
float i,k;
i=12345.6123456;
k=12345.6166543;
printf("%10.2f\n",i);
printf("%10.2f\n",k);


}
这个输出为12345.61
12345.62

我把你程序在VC6.0运行,出现二个警告,warning C4305: '=' : truncation from 'const double' to 'float',双精度转换浮点,会掉失一些位。问题可能出在这里。


谁有强殖装甲第二部,可以Q我460054868
2006-09-28 21:49
C语言学习者
Rank: 4
等 级:贵宾
威 望:13
帖 子:1278
专家分:0
注 册:2006-9-26
收藏
得分:0 
#include<stdio.h>
void main()
{
float i,k;
i=0.12345678;
k=0.12545678;
printf("i=%f\n",i);/*输出0。123457*/
printf("k=%f\n",k);/*输出0。125457*/
i=0.12345678;
k=0.12545678;
printf("i=%4.2f\n",i);/*输出0。12*/
printf("k=%4.2f\n",k);/*输出0。13*/
}
由些看见,如果输入超过8位数(包括小数点在内),那么系统按双精度转变浮点,按四舍五入法计算,还有如果加入长度那么由些可看,按四舍五入法计算。

谁有强殖装甲第二部,可以Q我460054868
2006-09-28 22:10
C语言学习者
Rank: 4
等 级:贵宾
威 望:13
帖 子:1278
专家分:0
注 册:2006-9-26
收藏
得分:0 
回答15楼,你用那个软件,我用vc6.0,就算我有TC2。0结果也是一样。我想看你的结果什么样,才下定断。

谁有强殖装甲第二部,可以Q我460054868
2006-10-07 17:53
快速回复:[讨论]书本中问题
数据加载中...
 
   



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

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