豆瓣小站维护:【代码review】数据结构与算法分析(C++) 1.3题

//-------------------------1_3.cpp
//problem:double类型运算的精度如何控制,总是有误差;对浮点数在内存中如何表示及运算,还没有特别清晰理性的认识。
 
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
using namespace std;
 
void printDigit(int n)                   //唯一的I/O处理函数,打印单个整数
{  
 printf("%d", n);
}
 
void printInt(double num)        //打印double数的整数部分
{
 
if (abs(num) >= 10)
        {
            printInt(num/10);
        }
        printDigit((int)num%10);
}
 
void printOut(double num,int n)        //完整的处理double数的函数,第二个参数为小数位
{
if(num<0)
printf("-");                    //符号处理
printInt(abs(num));            //先打印整数部分
printf(".");
        double numDic;
        if(num<0)
    numDic=(long)num-num;
        else
    numDic=num-(long)num;         //计算小数部分
double numshift=pow(10.0,n);
numDic=floor(numDic * numshift + 0.5) / numshift;             //四舍五入,保留小数部分的原有的小数位
        numDic*=pow(10,n);                    //将小数部分化为整数
printInt(numDic);                         //打印小数部分
    }
 
int main()
{
    printOut(-9876.5432f,4);
system("pause");
return 0;
}
 
posted @ 2012-12-28 11:03  kiyoto  阅读(167)  评论(0)    收藏  举报