在C语言里,用printf即可格式化输出小数,但是在某些特殊的场合,这些库函数却是不能使用的。故特意查找了一下单精度、双精度小数的二进制编码,自己实现一个输出十进制字符串的函数。具体代码如下所示。
#include"decimalString.h"
#include<stdio.h>
//若judge为0则返回ret值
#define RETURN_IF_ZERO(judge,ret) do{if(!(judge))return (ret);}while(0)
#define MARK(len) ((1<<(len))-1)//二进制长度len的掩码
#define LOW_BINARY(d,low) ((d)&MARK(low))//取双字d的低low位
#define HIGH_BINARY(d,high) (((d)>>(32-(high)))&MARK(high))//取双字d的高high位
int lengthOfInt(int a);//a十进制绝对值的位数
//整数a十进制写入到字符串buf中
char*intToStr(int a,char*buf,int*length);
//将小数点后若干高位写入字符串,高位为0需补上
//0<=decimal<1,且写入位数writeLen<=7
char*decimalToStr(double decimal,int writeLen,char*buf);
int floatToInt(float f){//单精度的整数部分
return doubleToInt(f);
}
//双精度小数取整
//适用范围:数值在int整型范围以内
int doubleToInt(double db){
const int eOffset=1023;//指数偏移
const int wWidth=52,eWidth=11;//尾数位数,指数位数
int *b