在C语言中将int 转化成 float发生了什么?为什么会产生舍入?
几种取整方法验证程序,如下,可以编译运行体会下
int强制转换是不保留小数的。
ceil是向上取整,floor是向上取整,这两个函数返回值是double类型的
c语言中没有四舍五入函数,需要使用时可以自己定义下。
#include #include // 自定义四舍五入宏#define ROUND(x) (int)(x + 0.4999999999999999)double round(double x, int d) // d为保留数字位数{double y = pow(10, d);return floor(x * y + 0.5) / y;}double round(double x, double d) // d为圆整精度{return floor(x / d + 0.5) * d;}void main(){double a = 3.0;int i;for(i=0; i<10; i++, a+=0.1)printf("%f%d%d%d%d
", a, (int)a, (int)ceil(a), (int)floor(a), ROUND(a));double x = 53.1415926;for(i=-1; i<5; i++) printf("%f", round(x, i));printf("%f", round(x, 0.037));}
强制转换的话,小数部分将被舍去,不会进行四舍五入处理。
比如浮点数13.45,如果转换为整数为13,
浮点数13.87,如果转换为整数仍然为13.
一般有float有24位用来表示有效数字,对于整数来说,超过2^24之后,很多数字都没法精确表示了,比如2^24+1。
如果把2^24+1这个int转化位float,就只能转换成最接近的2^24。
具体你把下面这个代码运行一下就知道了:
#include <stdio.h>
#include <math.h>
int main(void)
{
int a = pow(2,24) + 1;
float b;
b = a;
printf("a = %d
",a);
printf("b = %lf
",b);
}
用c语言编程简单的加减乘除以及混合运算的计算器
unsigned int flo = 0; float f = 0.0; unsigned len_f = 0; if(!str) { return -1; } p = str; while(*p != 0) { if(*p == '.') { p++; continue; } if(*p < '0' || *p > '9') { return -1; } p++; } p = strchr(str, '.'); if(!p) { strcpy(ints, str...
c语言编程题?
s=i\/j,m=i,i=j,j=m+j,t=t+s;printf("t=%f",t);} 2.(*)从键盘输入一个字符串,再将其逆序输出。(如:输入abcde,输出edcba)main(){int i;char c[10];scanf("%s",c);for(i=9;i>=0;i--)printf("%c",c[i]);} 3.(*)已知abc+cba=1333,其中a、b、c均为一...
在c语言二维数组中怎样交换两个数组元素中的字符串,请写代码._百度知 ...
c语言二维数组中怎样交换两个数组元素中的字符串,请写代码.flooshman000 | 浏览3605 次 |举报 我有更好的答案推荐于2017-12-16 17:36:04 最佳答案 int strcpy(char *s1,const char *s2);开辟一个缓冲区,比如char buff[100];\/\/假设你的字符串不超过这么多而你的而为数组为char **argv;其中argv[0] ...
C语言求1+sqrt(1+2)+sqrt(1+2+3)+…+sqrt(1+2+…+k) 要求flo
include <stdio.h> include <stdlib.h> include <math.h> void main(int argc, char *argv[]) { unsigned int uimax, uiidx =0, uilast = 0;double dsum = 0;if (argc < 1) return;uimax = (unsigned int)atoi(argv[1]);for (;uiidx < uimax; ++uiidx) { uilast += uiidx;...
求100到200之间的素数,5个一换行,最后求和,c语言
复制后直接在VC++6.0环境下运行就可以!结果图示:具体你可以去http:\/\/zhidao.baidu.com\/link?url=lECnESKm-mvxYwE6FLOK9QPxSjIy2vSCiws2QZ3FyxdNs7fuUFrzKASO35XmznHkpCjj6d-hwrqc3LSJa9Wnuq看他们的回答,还有很好的扩展!!!希望采纳,谢谢 ...
c++编程题 编写函数实现求n!,主程序要求输入n的值,用函数调用的方式求n...
采纳率:59% 擅长: 教育\/科学 编程语言 常见软件 C\/C++ VC++ 其他回答 #include <iostream>using namespace std;int multi(int n);void main() { int x; scanf("%d",&x); int n=multi(x); printf("%d\\n",n); int sign; scanf("%d",&sign);}int multi(int n){ int m; if(n==1) m...
c语言求余函数
scanf("%d%d",&a,&b);printf("a=%d,b=%d\\n",a,b);S=a\/b;Y=a%b;printf("商S=%d,余数Y=%d\\n",S,Y);} 如果要求精确商的话,可以这样:include<stdio.h> main(){int a,b,Y; \/*S为商,Y为余数*\/ double S;scanf("%d%d",&a,&b);printf("a=%d,b=%d\\n",a,b);...
关于一个C语言写的代码无法运行出结果
=0)int_out=0; term_3=redix_2;\/\/quo_2=int_num_2;quo_2=int_out_d;\/\/\/ do{rem_2=quo_2\/redix_2;int_out+=rem_2*term_3;term_3*=redix_2;}while((quo_2\/=redix_2)!=0);\/\/转换n进制小数\/\/\/flo_out=0;term_4=1.0\/10;num_flo_2=flo_out_d;do{num_flo_2...