请问C语言问题:float型数据转int,把整数部分和小数部分分开放在两个int型变量里,怎么尽量减小误差?
例:12345.53231,如何把整数部分存在int a 里,且a==12345?把小数存在变量int b里,且b==53231?(误差在+-2以内就行!)
请问C语言问题:float型数据转int,把整数部分和小数部分分开放在两个int型变量里,怎么尽量减小误差?
答案:4 悬赏:10 手机版
解决时间 2021-01-26 15:37
- 提问者网友:眉目添风霜
- 2021-01-25 17:18
最佳答案
- 五星知识达人网友:风格不统一
- 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
要存放 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次方,就可以了
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯