C语言拆分小数
请问如何利用C语言编写一个将任意数(小数和整数)拆分成一个一个独立的整数。例如:1.234→1,2,3,4谢谢!我没有sprinf()函数,没有库。...
请问如何利用C语言编写一个将任意数(小数和整数)拆分成一个一个独立的整数。
例如:1.234→1,2,3,4
谢谢!
我没有sprinf()函数,没有库。 展开
例如:1.234→1,2,3,4
谢谢!
我没有sprinf()函数,没有库。 展开
7个回答
2012-09-21 · 知道合伙人软件行家
关注
展开全部
float dat= 1234.5678;
int a;//整数部分
float b;//小数部分
a= (int)dat;//a= 1234
b= dat - a;//b= 0.5678
再用循环 a分别对10取余和取整,余数便是分离的数据, 整数部分在对10取余和取整,直到整数小于时为止;
b 就直接乘以10, 在取出整数部分,再用循环 ,直到所要的精度
int a;//整数部分
float b;//小数部分
a= (int)dat;//a= 1234
b= dat - a;//b= 0.5678
再用循环 a分别对10取余和取整,余数便是分离的数据, 整数部分在对10取余和取整,直到整数小于时为止;
b 就直接乘以10, 在取出整数部分,再用循环 ,直到所要的精度
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、如果这个数小,不考虑大数,可以用先打印整数部分,然后打印小数部分的方法。整数部分利用取余运算得到每位数、然后翻转。小数部分每次乘以10然后取整。
2、如果考虑大数,运用字符数组存储。逐个字符扫描,把不为点号的字符输出。
2、如果考虑大数,运用字符数组存储。逐个字符扫描,把不为点号的字符输出。
追问
谢谢你
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
#define MAX_LENGTH 100
int main(int argc, char *argv[])
{
// 原始小数
double n = 1.234;
// 小数的字符串形式
char str_n[MAX_LENGTH];
// 提取的整数部分
int integerPart[MAX_LENGTH],integerPartLength=0;
// 提取的小数部分
int decimalPart[MAX_LENGTH],decimalPartLength=0;
int i;
// 先将小数转换成字符串形式
sprintf(str_n,"%lg",n);
// 将小数点前的部分拆分出来
for(i=0;str_n[i]!='\0' && str_n[i]!='.';i++)
integerPart[integerPartLength++] = str_n[i]-'0';
// 将小数点后的部分拆分出来
for(i++;str_n[i]!='\0';i++)
decimalPart[decimalPartLength++] = str_n[i]-'0';
// 输出整数部分的每个数字
for(i=0;i<integerPartLength;i++)
printf("%d ",integerPart[i]);
// 输出小数数部分的每个数字
for(i=0;i<decimalPartLength;i++)
printf("%d ",decimalPart[i]);
}
#define MAX_LENGTH 100
int main(int argc, char *argv[])
{
// 原始小数
double n = 1.234;
// 小数的字符串形式
char str_n[MAX_LENGTH];
// 提取的整数部分
int integerPart[MAX_LENGTH],integerPartLength=0;
// 提取的小数部分
int decimalPart[MAX_LENGTH],decimalPartLength=0;
int i;
// 先将小数转换成字符串形式
sprintf(str_n,"%lg",n);
// 将小数点前的部分拆分出来
for(i=0;str_n[i]!='\0' && str_n[i]!='.';i++)
integerPart[integerPartLength++] = str_n[i]-'0';
// 将小数点后的部分拆分出来
for(i++;str_n[i]!='\0';i++)
decimalPart[decimalPartLength++] = str_n[i]-'0';
// 输出整数部分的每个数字
for(i=0;i<integerPartLength;i++)
printf("%d ",integerPart[i]);
// 输出小数数部分的每个数字
for(i=0;i<decimalPartLength;i++)
printf("%d ",decimalPart[i]);
}
追问
谢谢了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
说明一下 double 和float是进过插值计算出来的 所以在计算机中进行计算 不会得到精确结果
除非不做运算来截取小数位
例如 1.1234 如果1.1234-1 =1.1239999999999...
计算的例子
#include<stdio.h>
int main()
{
double d=1.1234;
int z=(int)d;
double t=d-z;
while(t>0)
{
printf("%d",(int)(t*10));
t=t*10-(int)(t*10);
}
getchar();
return 0;
}
字符串获取的例子
#include<stdio.h>
int main()
{
double d=1.1234;
char c[32];
memset(c,0,sizeof(char)*32);
sprintf(c,"%01lg",d);
int flag=0,i=0;
while(c[i]!=0x0)
{
if(c[i]=='.')
flag=1;
if(flag&&c[i]!='.')
printf("%d ",c[i]-0x30);
i++;
}
return 0;
}
除非不做运算来截取小数位
例如 1.1234 如果1.1234-1 =1.1239999999999...
计算的例子
#include<stdio.h>
int main()
{
double d=1.1234;
int z=(int)d;
double t=d-z;
while(t>0)
{
printf("%d",(int)(t*10));
t=t*10-(int)(t*10);
}
getchar();
return 0;
}
字符串获取的例子
#include<stdio.h>
int main()
{
double d=1.1234;
char c[32];
memset(c,0,sizeof(char)*32);
sprintf(c,"%01lg",d);
int flag=0,i=0;
while(c[i]!=0x0)
{
if(c[i]=='.')
flag=1;
if(flag&&c[i]!='.')
printf("%d ",c[i]-0x30);
i++;
}
return 0;
}
追问
谢谢了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询