| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 13137 人关注过本帖
标题:C语言四舍五入求整
只看楼主 加入收藏
七夜天泪
Rank: 2
等 级:论坛游民
帖 子:23
专家分:16
注 册:2016-8-16
结帖率:100%
收藏
 问题点数:0 回复次数:11 
C语言四舍五入求整
对小数进行四舍五入
每行一个小数,以0结束
显示四舍五入后的整数

搜索更多相关主题的帖子: C语言 
2016-08-18 18:45
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
又是整数又是小数的,不明白,能举下例子吗
2016-08-18 19:36
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
我也想知道怎么对小数点后n位四舍五入。
2016-08-18 21:46
ldsh304
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:242
专家分:755
注 册:2016-1-18
收藏
得分:0 
程序代码:
#include<stdio.h>

int main() {
    float  decimal;//小数
    int integer;
    scanf("%f", &decimal);
    while( decimal != 0) {
        integer = (int)decimal;//强转成整型 
        if (decimal > 0) {    //正数 
            if (decimal >= integer && decimal < (integer + 0.5)) {//在 integer ~ integer+0.5 之间 
                printf("%d\n", integer);
            } else {
                printf("%d\n", integer+1);
            }
        } else {
            if (decimal <= integer && decimal > (integer - 0.5)) {//在 integer-0.5 ~ integer  之间 
                printf("%d\n", integer);
            } else {    //负数 
                printf("%d\n", integer-1);
            }
            
        }
        scanf("%f", &decimal);
    }
    return 0;
} 
2016-08-18 22:13
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
回复 4楼 ldsh304
能不能任意保留n位小数并四舍五入?
2016-08-19 07:02
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int main(void)
 {
    double a,b;
    int n,i=0;
    char stra[100],strb[100];

        printf("请输入a=");
        scanf("%lf",&a);
        printf("要保留的小数n=");
        scanf("%d",&n);
        a=a*pow(10,n);
        sprintf(stra,"%.64lf",a);        //浮点数转换字符串,可以用gcvt转换,gevt取四舍五入
        while(stra[i]!='.')   
        {
            strb[i]=stra[i];
            i++;
        }
        b=atof(strb);        //字符串转换浮点数
        
        if(a-b>=0.5)  b=b+1;
        b=b*pow(10,-n);   
        
        printf("%.64g",b);

     return 0;   
 }
有什么不理解的再说。
2016-08-19 08:35
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
回复 6楼 linlulu001
我想知道
#define N 5
#include <stdio.h>
main()
{
    double m;
    scanf("%lf",&m);
    printf("%.Nlf",m);
}
这个程序为什么无法正常执行,输入3.2222输出结果为3。
2016-08-19 08:45
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:0 
回复 7楼 ehszt
#include <stdio.h>
#define N 5
int main( void )
{
    double m = 3.2222;
    printf( "%.*f", N, m );
}
2016-08-19 09:54
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
回复 8楼 rjsp
知道了,谢谢!
#include <stdio.h>
main()
{
    double m;
    int n;
    scanf("%lf%d",&m,&n);
    printf("%.*lf",n,m);
}
这个也可以四舍五入,但不是绝对。输入3.22225 4输出3.2222而不是3.2223
2016-08-19 10:06
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:0 
以下是引用ehszt在2016-8-19 10:06:10的发言:

知道了,谢谢!
#include  
main()
{
    double m;
    int n;
    scanf("%lf%d",&m,&n);
    printf("%.*lf",n,m);
}
这个也可以四舍五入,但不是绝对。输入3.22225 4输出3.2222而不是3.2223

第一,"3.22225"解析为double后,其值不一定是等于3.22225的。
这一点你应该是知道的吧,前者"3.22225"是具有无限精度的实数,而后者double是有限精度的浮点数。
double m = 3.22225 后, m的值可能是 3.22224999999999983657517077517695724964141845703125
那么保留4位小数并四舍五入后,当然就是3.2222

第二,printf也没说过使用“四舍五入”,它说的是“The value is rounded to the appropriate number of digits.”
什么是appropriate的呢?除了VC使用四舍五入外,几乎其它编译器全用的是四舍六入五成双,但这还不是全部,什么 趋零截、趣近截、趣负极限截、趣正极限截 等等,可以无限多种
参考一些相关的C标准函数吧,如 fegetround/fesetround、rint/nearbyint/round 等等

BTW:楼主这题,我没回答,因为涉及到浮点数就没法回答,三个问题
a. 没法用浮点数精确表示实数,如上述的 double m = 3.22225,m并不等于实数3.22225
b. 运行过程也同样不行,浮点数的 x+0.0005 结果,未必符合实数的结果。
随便举个例子 0.12345 + 0.00005 它有可能小于 0.12350
实际上它是 0.123450000000000004174438572590588591992855072021484375 + 0.0000500000000000000023960868011929647991564706899225711822509765625 = 0.123499999999999998667732370449812151491641998291015625
你看,一个大于0.12345的数 加上 一个大于0.00005的数,结果竟然是小于 0.12350
c. 对于截断后的结果,若遇“溢出”“不精确”等异常怎么办?
2016-08-19 12:04
快速回复:C语言四舍五入求整
数据加载中...
 
   



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

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