c-C语言小数点舍入问题,求大神!!

问题描述

C语言小数点舍入问题,求大神!!

若有定义:float n;int m;则以下能实现将 n 中的数值保留小数点后两位,第三位进行四舍五入的表达式 是( B )。
A)n=(n*100+0.5)/100.0
B)m=n*100+0.5,n=m/100.0
C)n=n*100+0.5/100.0
D)n=(n/100+0.5)*100.0
怎么理解怎么选的??

解决方案

你首先要知道:float/int==float。

float n要保留两位小数,就意味着要先把浮点向前移两位,即

 int m;
m=(int)(n*100);   //先把小数点第三位后的去掉
n=m/100.0;       //这里先不考虑四舍五入

你可以用n=1.234代入进去。

现在我们考虑四舍五入:
我们知道,浮点型强制转换成int类型是把小数点后的全部去掉,不管小数点后是.9还是.1.
而你要四舍五入,就先把float+0.5,再强制转换成int,这样就能实现大于0.5的转换后进1了。
然后再n=m/100.0转换成浮点型;
代码如下:

int m;
m=(int)(n*100+0.5);   //先四舍五入,再转换成int
n=m/100.0;           //再转回来 

解决方案二:

int有四舍五入
这个说法完全错误。
在C语言中,去整是不会“入”的。1.9去整还是1。所以要加0.5。

解决方案三:

n*100你不要按照数学去理解,在C语言中,*100,就得到整数了。
比如3.1415*100=314,而不是314.15。
所以再除以100。0就是3.14。

解决方案四:

int有四舍五入,相当于对int做扩大处理,完后在缩小

解决方案五:

这个就是先挪位,比如3.1415 * 100就是314
加0.5就是314.5
把314.5给int m 变成314
在把m变回n就除100

解决方案六:

你首先要知道:float/int==float。
首先你就错了
float/int相当于整除,结果是int
所以要除以100.0,这才是float/float

时间: 2024-11-05 14:54:42

c-C语言小数点舍入问题,求大神!!的相关文章

c语言基础问题,求大神解答

问题描述 c语言基础问题,求大神解答 输入10个整数,使其各数顺序向后移动m个位置,如1.2.3.4.5.6.7.8.9.10移动后为7.8.9.10.1.2.3.4.5.6 解决方案 用循环,对1--8的数据向后移,0,9号数据单独考虑 解决方案二: 百度上有个算法,你试试效率怎么样 void Reverse(int *arr, int b, int e) { for(; b < e; b++, e--) { int temp = arr[e]; arr[e] = arr[b]; arr[b]

printf-c语言 素数求和问题 求大神看看我代码的问题

问题描述 c语言 素数求和问题 求大神看看我代码的问题 http://acm.nyist.net/JudgeOnline/problem.php?pid=22&rec=rec 我的代码是: #include #include int main() { int N,M,sum,i,j,a[10],flag; double s; scanf("%d",&M); while(M--) { scanf("%d",&N); for(i=0;i<N

vc-c语言的疑惑,求大神讲解

问题描述 c语言的疑惑,求大神讲解 在vc环境下conio.h不是没有这些函数gotoxy(),clrscr()那么它在vc环境下到底有什么用 解决方案 这些函数是TurboC特有的,VC没有,VC使用gdi去作图. 解决方案二: 头文件中有其它一些定义,不过这都是一些控制台相关的,用的应该很少. 解决方案三: VC有自己的图形库,你要强行用别的话,弄起来比较麻烦 解决方案四: 要做图形界面,可以用VC的MFC来做啊 解决方案五: 屏蔽,试下,就可以知道结果了!~ 解决方案六: 那个清屏函数应该

调用函数-一道C语言的题目,求大神解答

问题描述 一道C语言的题目,求大神解答 输入一个正整数,逐位分割该数的每一位数字,求由数字所构成的最大整数.例如:输入624891,得到最大整数:986421.要求定义和调用函数计算并返回一个x可构成的最大整数. 解决方案 #include #define N 20 int fun(int n) { int x,t,s[N]={0},i,j,len; for(len=0;x!=0;len++) { x=n/10; s[len]=n%10; n=x; } for(i=0;i<len-1;i++)

c语言问题-关于c语言的问题,求大神解答

问题描述 关于c语言的问题,求大神解答 为什么输出是1#3#21# 解决方案 这么简单..你自己循环3遍就看出来了.你认为该是什么结果?

c语言-C语言小问题,求大神。

问题描述 C语言小问题,求大神. 题目:有三串字符,A,B,C.如果A中字符跟B中相同,则把C中字符赋给A. #include"stdio.h" #define N 100 void replace(char *a,char *b,char *c) { char *p; p=a; while(*a!='') //尤其注意判断等于是 == 号 { if(*a==*b) {*a=*c;printf("%c",*a);} a++; b++; c++; } a=p; pri

c语言-C语言题目,跪求大神给个代码,实在不会啊

问题描述 C语言题目,跪求大神给个代码,实在不会啊 描述 大家都知道二进制数只含有0和1,那么问题来了,告诉你一个区间[L,R),L,R都是int范围类的正整数.且L < R,在这个区间里的所有数转化为二进制后所有位数之和最大的数是?(如果有多个输出值最小的) 输入 多组测试数据,每组测试数据仅含有两个整数L,R. 输出 一个整数,表示在以上区间内转化成二进制后所有位数之和最大的数 样例输入 4 7 样例输出 5 解决方案 #include <stdio.h> int cal(int n

C语言小算法,求大神支招

问题描述 C语言小算法,求大神支招 输入一串int类型的数组,要求出某一截数字串加起来最大,并打印数字串. 解决方案 http://www.cnblogs.com/zhousir1991/archive/2011/05/26/2058975.html 解决方案二: 用dp来做http://blog.csdn.net/someday7_toi/article/details/7852448

malloc-c语言指针问题,求大神,新手。

问题描述 c语言指针问题,求大神,新手. #include #include #include struct Student { int age; char name[100]; float score; }; void Ininformation(int * IP_len, struct Student * IP_arr) { int i; for (i = 0; i < *IP_len; ++i) { printf("请输入%d个学生信息: ", *IP_len); prin

C语言 神奇算式。求大神解答!!!

问题描述 C语言 神奇算式.求大神解答!!! 标题:神奇算式 由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成. 比如: 210 x 6 = 1260 8 x 473 = 3784 27 x 81 = 2187 解决方案 http://zhidao.baidu.com/link?url=auHsWuamEqBq75Cug4hLrZnoWupqp1H_DLpBxCwmcDJOc2xpCf7ekRWx_YuGqDPp-uuj84RKKPGWeFlPA_UK4BZihp7FBQx3