c语言取小数点后
㈠ 如何用c语言计算小数点后位数
这个要看小数按什么格式输入。
如果按%s输入,也就是按字符串格式输入,先找到小数点的位置,然后统计下小数点后数字的长度。
具体实现可参考:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[])
{
char a[128];
while(scanf("%s",a)!=EOF)
{
if(strstr(a,".")!=NULL)
printf("%d\n",strlen(strstr(a,".")+1));
else
printf("0\n");
}
system("pause");
return 0;
}
如果按%f(对应float类型小数)或者%lf(double类型的小数)方式读入,则需要先去掉整数部分,然后看小数部分一直乘10减去整数部分,知道等于0,统计,乘了几次10,但是由于浮点数在计算机中存的并不是准确值,这个往往得不到正确的结果。可以使用sprintf(str,"%g",f);,然后由于f毕竟不是准确值,还是会出现有些问题,源码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[])
{
char a[128];
float f;
while(scanf("%f",&f)!=EOF)
{
sprintf(a,"%g",f);
if(strstr(a,".")!=NULL)
printf("%d\n",strlen(strstr(a,".")+1));
else
printf("0\n");
}
system("pause");
return 0;
}
这是最后一个已经出现错误,所以遇到要精确判断小数点的位数,最好直接按字符串读入,这和图灵机的工作原理暗暗相合。
㈡ C语言中怎么取得小数点后面的数
float a = 3.1415926;
float d;
d = a - (int) a; // 用这个计算取得小数点后的数
printf("%f %f\n",a, d );
㈢ C语言输入小数,精确到小数点后10位
把scanf("%15.10f",&x);应该改成scanf("%15lf",&x);这样就好了。
代码中x是double型的,在输入数据的时候是不允许使用%f的,double型的数据输入必须使用%lf
还有,scanf("%15.10f",&x);15.10这个是不允许出现的,在数据输入的时候只能指定输入数据的总长度,不能指定小数点后的长度。
(3)c语言取小数点后扩展阅读:
scanf(函数原型
intscanf(constchar*restrictformat,...);
函数 scanf() 是从标准输入流stdin(标准输入设备,一般指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。
函数的第一个参数是格式字符串,它指定了输入的格式,并按照格式说明符解析输入对应位置的信息并存储于可变参数列表中对应的指针所指位置。每一个指针要求非空,并且与字符串中的格式符一一顺次对应。
㈣ C语言怎么只保留小数点后的数字
可以利用C语言的强制转换规则。
C语言规定,当浮点数强制转换为整型类型时,只保留整数部分。
所以对于浮点数,比如float类型a, 执行(int)a后的值就是整数部分。
这样当执行a-(int)a时,得到的就是小数部分的值了。
如果该功能经常使用,那么可以定义一个带参数的宏
#define DECIMAL(X) (x-(int)x)
这样执行DECIMAL(a)得到的值就是t的小数部分。
㈤ 在c语言中如何指定精确到小数点后任意位数
Note1:
正数 x 四舍五入的技巧:
x --> (int)(x+0.5)
当 x=n+r, 0<=r<1,
若 0<=r<0.5, 则r+0.5<1, (int)(x+0.5)=(int)(n+r+0.5)=n
若 0.5<=r<1, 则1<= r+0.5, (int)(x+0.5)=(int)(n+r+0.5)=n+1
Note2:
举例来说: 若正数要依舍去法精确到小数点后第二位
x --> (int)(x*100)/100 就好.
例如 3.2794 --> (int)(327.94)/100=327/100=3.27
Note3:
举例来说: 若正数要四舍五入精确到小数点后第二位
x*100 四舍五入再除以100 就好
也就是 (int)(x*100+0.5)/100
㈥ 在C语言计算出的结果中怎么保留小数点后两位
比如
float a = 23.456789;
printf("%.2f",a); //输出为23.45