请问C语言问题:float型数据转int,把整数部分和小数部分分开放在两个int型变量里,怎么尽量减小误差?例:12345.53231,如何把整数部分存在int a 里,且a==12345?把小数存在变量int b里,且b==53231?(误差
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/15 18:38:53
请问C语言问题:float型数据转int,把整数部分和小数部分分开放在两个int型变量里,怎么尽量减小误差?例:12345.53231,如何把整数部分存在int a 里,且a==12345?把小数存在变量int b里,且b==53231?(误差
请问C语言问题:float型数据转int,把整数部分和小数部分分开放在两个int型变量里,怎么尽量减小误差?
例:12345.53231,如何把整数部分存在int a 里,且a==12345?把小数存在变量int b里,且b==53231?(误差在+-2以内就行!)
请问C语言问题:float型数据转int,把整数部分和小数部分分开放在两个int型变量里,怎么尽量减小误差?例:12345.53231,如何把整数部分存在int a 里,且a==12345?把小数存在变量int b里,且b==53231?(误差
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