// 函数名称:DoubleToStr
// 前置函数:无
// 函数功能:把double类型的数据转换成字符串
// 参数:
// 【Input】val,float的小数有6位有效位数,
// double的小数有12位有效位数
// 【Input】ipart,[0,9]
// 【Input】fpart,[0,...)
// 【Output】str,字符串空间大小要大于等于1+(ipart+1)+1+fpart+1
// 返回:str
// 使用时注意事项:
// 1.没有对参数进行合法型的判断
// 2.str不能等于NULL,str的空间不能小于1+(ipart+1)+1+fpart+1
// 3.ipart与val的取值范围
// 4.例如val=123.456,则ipart要大于等于2
// 时间:
// 公司:
// 其他:
char *DoubleToStr( char *str, double val, unsigned char ipart/*int part*/, unsigned char fpart/*float part*/ )
{
// str != NULL
// 使用截断法,没有采用四舍五入
// ipart为val要保留整数的位数,ipart[0,9]
// fpart为val要保留小数的位数,fpart[0,...)
// 因此str字符串的空间要大于ipart+fpart+3
// 一个符号字符
// 一个小数点字符
// 一个字符串结束字符
char *st = str;
int i = 0;
long tmp = 1;
long tmpVal = val;
for ( i = 0; i < ipart; i++ )
{
tmp *= 10;
}
if ( tmpVal < 0 )
{
*str = '-';
val = -val;
tmpVal = - tmpVal;
}
else
*str = '+';
if ( tmpVal / tmp >= 10 )
*str = 'E';
str++;
while ( tmp )
{
*(str++) = (tmpVal / tmp) % 10 + '0';
tmp /= 10;
}
*(str++) = '.';
val -= tmpVal;
i = 0;
while ( i++ < fpart )
{
val *= 10;
tmpVal = val;
*(str++) = tmpVal + '0';
val -= tmpVal;
}
*str = '\0';
return st;
}
|