1. 程式人生 > >C++如何去除浮點數字符串後面的零

C++如何去除浮點數字符串後面的零

有時我們需要將浮點數轉化為字元,然後列印輸出。下面是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