只使用处理I/O的PrintDigit函数,编写一个过程以输出任意实数

只使用处理I/O的PrintDigit函数,编写一个过程以输出任意实数


思路

这无非就是打印的时候注意浮点数精度的问题


实现

代码:

#include <stdio.h>

void PrintDigit(double , int);

int main(int argc, char **argv)
{

    PrintDigit(12.123456,7);
    putchar('\n');

    return 0;
}

void PrintDigit(double num, int len)
{
    if(num < 0){
        num = -num;
        putchar('-');
    }
    int n = (int) num;
    int i=0;
    printf("%d",n);

    num = num - n;
    while(num > 0 && i < len){
        if (i == 0){
            // 由于double小数存储方式并非确定值,而是一个近似值所以采用这种方式
            double add = 0.5;
            int j;
            for (j=0; j<len; j++) {
                add /= 10;
            }
            num+=add;
            putchar('.');
        }
        num = num * 10;
        n = (int) (num);
        printf("%d",n);
        num = num - n;
        i++;
    }

}


结果:



借鉴了网上其他的实践方式,我感觉我这个应该是最简单的方式了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值