C语言 提取double的每一位

#include<stdio.h>
int main()
{
    double x = 256.141592654;
    int n = (int)x % 1000; //整数部分
    while(n) //整数部分输出
    {
        int temp = n % 10;
        n /= 10;
        printf("%d
", temp);
    }

    int i = 5;
    while(i>0) //输出5位小数
    {
        x = x*10;
        printf("%d
",(int)x%10);  //强制将double转换成int,因为求余(%)必须为int类型,
        i--;
    }

    return 0;
}

附:C语言,如何输出每一位数字? https://zhidao.baidu.com/question/584309257492424645.html

一、传统方法,通过除法和模除,取出每一位,并输出。

#include<stdio.h>
void output(int n)
{
    int a[10];
    int l=0;
    /*
    循环获取每一位的值,并存到数组a中。
    其中l表示已经获取到的位数。
    由于每次获取的是个位n%10,所以存在数组a中的是各个位数的逆序。
    */
    while(n)
    {
        a[l++] = n%10;
        n/=10;
    }
    //反序输出每一位值。
    while(--l>=0) 
        printf("%d ", a[l]); 
}
int main()
{
    int n;
    scanf("%d",&n);//输入n值。
    output(n);//输出各个位。
    return 0;
}

二、转为字符串,然后输出字符串各个字符。

由于在C语言中,有很多库函数,比如itoa, sprintf等,都可以很方便的将整数转为字符串,而逐位输出字符串各个字节值是很简单的,所以可以通过转为字符串,再输出的方式输出各个位的值。

#include<stdio.h>
void output(int n)
{
    char a[11];
    int i;
    sprintf(a, "%d", n);//转为字符串。
    for(i = 0; a[i]; i++)//遍历字符串。
        printf("%c ", a[i]);//输出各个位值。
}
int main()
{
    int n;
    scanf("%d",&n);//输入n值。
    output(n);//输出各个位。
    return 0;
}
原文地址:https://www.cnblogs.com/tanrong/p/7200334.html