有時我們需要将浮點數轉化為字元,然後列印輸出。下面是c++的裡的一種實作:
char str[32];
double num = 32.0100;
sprintf(str, "%f", num);
std::cout<<str<<std::endl;
常見輸出: 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<<str<<std::endl;
方案二:
使用STL提供的ostringstream很容易解決這個問題,也更自然。新的實作如下:
double num=32.0100;
std::ostringstream oss;
oss<<num;
std::cout<<oss.str()<<std::endl;
輸出: 32.01