爸爸的新娘 书包网:C语言中如何将变量123.4的个位、十位、百位、小数位分别取出来

来源:百度文库 编辑:神马品牌网 时间:2024/05/10 13:02:49

楼上的注意是123.4,那样表示不正确。而且十位的表达也错了。

#include<stdio.h>
void main()
{
int xi,ge,sh,ba,t;
t=(int)(123.4);
ge=t%10;
sh=t/10%10;
ba=t/100;
xi=(123.4-t)*10;
printf("%d %d %d %d\n",ge,sh,ba,xi);
}

如果不考虑异常情况的话,给你写个简单点的函数吧
这个函数非常简单,不考虑输入异常,不考虑负数问题,不考虑double的精度问题,不考虑溢出等等..........
当bit为0,表示个位,-1表示小数点后1位,1表示十位,依次.........
unsigned int GetNumber(double value,int bit)
{
//前面是异常处理
int nTemp=int(value/pow(10,bit))-int(value/pow(10,bit+1))*10;
return nTemp;
}

其中int(...)是强制转换,c++这么用,c的话得(int)(....)
异常处理部分如果考虑得不多得话就是考虑下极限情况,比如是否溢出最高位或最低位等等,这个就很容易了.....

pow函数是乘方函数,pow(x,y)表示x的y次幂
参数里面value一定用double,否则你光调用Get....(123.45,-2)就不一定什么结果了,(精度转换缺失问题)。
上面那个调用的结果是5,表示取小数点后第二位的数字

多说两句,如果换成字符串的话还是要解析的,因为有小数部分,还是这么做简单高效,还有楼上几个都不大对

用sprintf函数或itoa函数把它变成字符串去处理

例如:
#include <stdio.h>
#include <conio.h>

void main()
{
double x = 123.4;
char n[11];

sprintf(n,"%lf",x);

printf("%s\n",n);
}
很多分离数位的问题转换成字符串要很好处理。

比如说
1:判断一个书是否是回文数。把这个数变成字符串就很好处理。
2:处理大整数问题,因为C中的整型,长整型等数都有存储范围,所以不能处理大整数的问题,这时就需要用到字符串了。你可以尝试的编一下大整数的加减乘除的函数,如果编不出来,可以问我:)

再给你看道简单的典型题吧:
求数字的乘积根。
定义:正整数中的非0数字的乘积称为该数字的成绩。如1620的数字成绩为1*6*2=12,12的数字乘积为1*2=2;
定义:正整数的数字乘积根为反复取该整数的数字乘积,直到最后的数字乘积为一个数字,这个一位数字就叫该正整数的数字乘积根。
例如:1620的数字乘积为1*6*2=12,12的数字乘积为1*2=2,因此2为1620的数字乘积根。
编程要求:统计10000以内,其数字乘积根分别为1~9的正整数的个数。

你最好自己先做一下,我这里有我编好的代码,如果需要,我可以给你做个参考,在此就不先发布了:)

一楼的老兄,十位是取100余除十吧

123/100百位
123/10 十位
123%10 个位