永发信息网

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

答案:4  悬赏:10  手机版
解决时间 2021-01-26 15:37
  • 提问者网友:眉目添风霜
  • 2021-01-25 17:18
请问C语言问题:float型数据转int,把整数部分和小数部分分开放在两个int型变量里,怎么尽量减小误差?
例:12345.53231,如何把整数部分存在int a 里,且a==12345?把小数存在变量int b里,且b==53231?(误差在+-2以内就行!)
最佳答案
  • 五星知识达人网友:风格不统一
  • 2021-01-25 18:47
float型数据精度只有 有效数字 6-7 位,所以存放 12345.53231 时,只能精确到 12345.53。

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

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

#include <stdio.h>

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
全部回答
  • 1楼网友:梦中风几里
  • 2021-01-25 21:28
只要有一方为小数,类型自动转换为小数。不要小数就在前面加一个强制转换符
  • 2楼网友:街头电车
  • 2021-01-25 21:19
这个看精度要求,浮点数本身就不是很精确的。如果要求很精确的分离两者,可以从二进制的定义着手,float型数据定义如下: 1bit(符号位) 8bits(指数位) 23bits(尾数位) 可以考虑将其转换为long,再将整数值扣除,从而获得小数
  • 3楼网友:爱难随人意
  • 2021-01-25 20:13
首先定义变量 int a,b ; float c,d 然后将c值赋予给a,即a得到c的整数部分 接着用d=c-a,d为c的小数部分 最后确定出你要精确的位数,将d乘以对应的10的N次方,就可以了
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯