//-------------------------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;
}