C语言拆分小数

请问如何利用C语言编写一个将任意数(小数和整数)拆分成一个一个独立的整数。例如:1.234→1,2,3,4谢谢!我没有sprinf()函数,没有库。... 请问如何利用C语言编写一个将任意数(小数和整数)拆分成一个一个独立的整数。
例如:1.234→1,2,3,4
谢谢!
我没有sprinf()函数,没有库。
展开
 我来答
cpucash
2012-09-21 · TA获得超过1584个赞
知道小有建树答主
回答量:1457
采纳率:66%
帮助的人:966万
展开全部
整数没问题,
while(n)
{
a[i++]=n%10;
n/=10;

}
这样就能拆成单独的整数,但是是反序的,输出需要从后面开始输出

但是小数不可以,建议字符串输入
因为浮点数的存储是近似的,你可以试验一下,除了如2的n次方分之几外,其他的都是近似的
0.5 0.25 0.375等等是准确存储外,其他的都不是准确存储
你可以试验0.1的二进制是多少,是个无限小数
理论是这样,那么小数的计算就不可能准确的提取出单独的整数
lgao622
2012-09-21 · 知道合伙人软件行家
lgao622
知道合伙人软件行家
采纳数:1137 获赞数:6550
毕业于武汉工程大学邮电与信息工程学院通信专业,软件行业,4年工作经验。

向TA提问 私信TA
展开全部
float dat= 1234.5678;
int a;//整数部分
float b;//小数部分

a= (int)dat;//a= 1234
b= dat - a;//b= 0.5678
再用循环 a分别对10取余和取整,余数便是分离的数据, 整数部分在对10取余和取整,直到整数小于时为止;

b 就直接乘以10, 在取出整数部分,再用循环 ,直到所要的精度
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
luckylukenuli
2012-09-21 · 超过13用户采纳过TA的回答
知道答主
回答量:54
采纳率:0%
帮助的人:23.2万
展开全部
1、如果这个数小,不考虑大数,可以用先打印整数部分,然后打印小数部分的方法。整数部分利用取余运算得到每位数、然后翻转。小数部分每次乘以10然后取整。
2、如果考虑大数,运用字符数组存储。逐个字符扫描,把不为点号的字符输出。
追问
谢谢你
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友b0e28cae4
2012-09-21 · TA获得超过4016个赞
知道大有可为答主
回答量:1275
采纳率:85%
帮助的人:611万
展开全部
#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]);
}
追问
谢谢了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wangnasa
2012-09-21 · TA获得超过776个赞
知道小有建树答主
回答量:732
采纳率:100%
帮助的人:639万
展开全部
说明一下 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;
}
追问
谢谢了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式