在C语言中,如何将一个浮点数变换成整数?
需要准备的材料分别有:电脑、C语言编译器。
1、首先,打开C语言编译器,新建一个初始.cpp文件,例如:test.cpp。
2、在test.cpp文件中,输入C语言代码:double a = 2.71828;printf(“%d”, int(a));。
3、编译器运行test.cpp文件,此时成功将浮点数2.71828转换为了整数2。
C语言中对于浮点数进行(int)转换时,计算机是按照四舍五入呢?还是只取整数部分?
是只取整数部分的。
也就是,可能是1.999999999
然后转换为int就是1,所以
浮点数向int转换,会丢失精度。
为了避免这个,建议如果想取到整数部分。
可以使用
float b;
int a;
a=(b+0.5);
这样写的话,就是四舍五入。
如果
写成
a=b.
可能有
0.99999999999
被截断,
a就是0的情况。
C语言浮点型转换为整型怎么转换的?
C语言有以下几种取整方法:
1、直接赋值给整数变量。如:
int i = 2.5; 或 i = (int) 2.5;
这种方法采用的是舍去小数部分,能用于你的问题。
2、C/C++中的整数除法运算符“/”本身就有取整功能(int / int),而下面介绍的取整函数返回值是double。整数除法对正数的取整是舍去小数部分,能用于你的问题。不过整数除法对负数的取整结果和使用的C编译器有关。
3、使用floor函数。floor(x)返回的是小于或等于x的最大整数。如:
floor(2.5) = 2
floor(-2.5) = -3
4、使用ceil函数。ceil(x)返回的是大于x的最小整数。如:
ceil(2.5) = 3
ceil(-2.5) = -2
floor()是向负无穷大舍入,floor(-2.5) = -3;ceil()是向正无穷大舍入,ceil(-2.5) = -2。floor函数能用于你的问题。
5、
int b = (int)a;//取整
int c = (int)(a+0.5);//四舍五入
C语言中float型转换成int型是什么规则
#includestdio.h
//#includemath.h
int main()
{
int i;
int i2;
int siz;
float P[14]={0,1,2,3,1,1,5,1,2.3,6.1,500,130,5,0};
siz=sizeof(P);//打印出数组P的字节数
printf(“sizeof=%d\r\n”,siz);
for(i=0;i14;i++)
{
printf(“P[intp]=%d\r\n”,floor(P[i]));//打印出P数组的每一个元素值,以int型显示
}
for(i2=0;i214;i2++)
{
printf(“P[floatp]=%f\r\n”,P[i2]);//打印出P数组的每一个元素值,以float型显示
}
}
#includestdio.h
#includemath.h
int main()
{
int i;
int i2;
int siz;
float P[14]={0,1,2,3,1,1,5,1,2.3,6.1,500,130,5,0};
siz=sizeof(P);//打印出数组P的字节数
printf(“sizeof=%d\r\n”,siz);
for(i=0;i14;i++)
{
printf(“P[intp]=%d\r\n”,floor(P[i]));//打印出P数组的每一个元素值,以int型显示
}
for(i2=0;i214;i2++)
{
printf(“P[floatp]=%f\r\n”,P[i2]);//打印出P数组的每一个元素值,以float型显示
}
}
好像VC++6.0运行的结果只有强制转换有用,不知道是不是我写的语句有问题
求教如何把浮点数转化为定点数
C语言代码实现如下:
*********************************************************************
* 函数名称: BspDouToFix
* 功能描述: 将指定的浮点数 转化为 定点数
* 算法描述: 无
* 输入参数: ucType 0表示无符号 1表示有符号
* ucInteger 表示整数占几个bit
* ucdecimal 表示小数占几个bit
* dbDou 为待转化的浮点数
* 输出参数: 无
* 返 回 值: 转化后的定点数
*********************************************************************
VOID BspDouToFix(UCHAR ucType, UCHAR ucInteger, UCHAR ucdecimal, DOUBLE dbDou, UINT64 *pllfix)
{
UINT64 lltemp = 0;
DOUBLE dbtemp = 0;
dbtemp = dbDou;
if(dbtemp 0) /* 有符号正数 或者 无符号数 */
{
lltemp = (UINT64)(-dbDou*(1ucdecimal));
*pllfix = (UINT64)((UINT64)(1)(ucType + ucInteger + ucdecimal)) – lltemp;
}
else if(dbtemp 0) /* 有符号负数 */
{
*pllfix = (UINT64)(dbDou * (1ucdecimal));
}
else
{
*pllfix = 0;
}
}
在C语言中的类型转化原则是什么?
类型转化的原则是从低级向高级自动转化(除非人为的加以控制)。计算的转换顺序基本是这样的:
字符型—→整型—→长整型—→浮点型—→单精度型→双精度型
就是当字符型和整型在一起运算时,结果为整型,如果整型和浮点型在一起运算,所得的结果就是浮点型,如果有双精度型参与运算,那么答案就是双精度型了。
强制转换是这样的,在类型说明符的两边加上括号,就把后面的变量转换成所要的类型了。