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
首先定义变量 int a,b ; float c,d
然后漏碰扒将c值赋予给a,即a得返昌到c的整数部分
接着用d=c-a,d为c的小数部分
最后确吵扰定出你要精确的位数,将d乘以对应的10的N次方,就可以了
这个看精度要求,浮点数本身就不是很精确的。如果要求很精确的运丛分离两者,可以从二进制的没敬定义着手,float型数据定义如下: 1bit(符号位) 8bits(指数位) 23bits(尾数位)
可以考虑将其转换枯悄慎为long,再将整数值扣除,从而获得小数
先把整数部分取出来,小数部分嘛,想保留多少位就放大10^n倍就行了