请问C语言问题:float型数据转int,把整数部分和小数部分分开放在两个int型变量里,怎么尽量减小误差?

2024-11-17 02:49:44
推荐回答(4个)
回答1:

float型数据精度只有 有效数字 6-7 位,所以存放 12345.53231 时,只能精确到 12345.53。

要存放 12345.53231,可以用 double 或 char s[].

double 仍有 10进制到2进制,2进制回返液竖10进制的误差问题。

#include

int main(){

double x = 12345.53231;

int a,b;char s[30];

int i;a = (int) x; // a 没问题

b = (x-a) * 100000; // 这里要假定取多少位小数

printf("a=%d b=%d\n",a,b);

sprintf(s,"埋厅%15.5lf",x); //用这个方法转字符串。

// 当然最好是一开始声明 char s[30]=“12345.53231”;就不必转化漏大。

sscanf(s,"%d.%d",&a,&b); // 注意 格式里 有个小数点符号

printf("a=%d b=%d\n",a,b);

}

输出:

a=12345 b=53231

a=12345 b=53231

回答2:

首先定义变量 int a,b ; float c,d
然后漏碰扒将c值赋予给a,即a得返昌到c的整数部分
接着用d=c-a,d为c的小数部分
最后确吵扰定出你要精确的位数,将d乘以对应的10的N次方,就可以了

回答3:

这个看精度要求,浮点数本身就不是很精确的。如果要求很精确的运丛分离两者,可以从二进制的没敬定义着手,float型数据定义如下: 1bit(符号位) 8bits(指数位) 23bits(尾数位)
可以考虑将其转换枯悄慎为long,再将整数值扣除,从而获得小数

回答4:

先把整数部分取出来,小数部分嘛,想保留多少位就放大10^n倍就行了