有时我们需要将浮点数转化为字符,然后打印输出。下面是c++的里的一种实现:
char str[32];
double num = 32.0100;
sprintf(str, "%f", num);
std::cout<
常见输出: 32.0100
但是,有时我们会有这样的需求:舍弃字符串最后多余的零。 我最近就遇到了这种需求,各处求解,最后通过网上案例的启发,想到了两种解决方案。
方案1:
创建一个函数removeLastZero,大体思路:从尾到头检索目标字符串,找到第一个非零数字,然后截取前半部分返回。
void removeLastZero(char* numstr)
{
if (NULL == strchr(numstr, '.'))
return;
int length = strlen(numstr);
for (int i = length - 1; i > 0; --i)
{
if ('\0' == numstr[i])
{
continue;
}
else if ('0' == numstr[i])
{
numstr[i] = '\0';
}
else if ('.' == numstr[i])// 小数点之后全为零
{
numstr[i] = '\0';
break;
}
else// 小数点后有非零数字
{
break;
}
}
}// 调用
char str[32];
double num = 32.0100;
sprintf(str, "%f", num);
removeLastZero(str);
std::cout<
方案二:
使用STL提供的ostringstream很容易解决这个问题,也更自然。新的实现如下: double num=32.0100;
std::ostringstream oss;
oss<
std::cout<
原文:http://blog.csdn.net/tobefxz/article/details/30106915