浮點數小數點後開始非零數字的起始位置

有這樣一個問題:須要知道浮點數從小數點後,開始非零數字的起始位置。好比:1.05,非零位置就是2;0.004200,非零位置就是3。具體效果以下圖:ios

代碼:spa

#include <iostream>
#include <iomanip>
#include <stdio.h>
using namespace std;

int getDoubleAccuracy(double d)
{
	char chArr[100] = "";
	int iIndex = 0;
	int iPos = 1;
	
	int iLen = sprintf(chArr, "%lf", d);
	// 檢索小數點位置 
	for (; iIndex < iLen && '\0' != chArr[iIndex]; ++iIndex)
	{
		if ('.' == chArr[iIndex])
		{
			++iIndex;
			break;
		}
	}
	
	// 檢索小數點到有效位數之間的長度 
	for (; iIndex < iLen && '\0' != chArr[iIndex]; ++iIndex)
	{
		if ('0' != chArr[iIndex])
		{
			return iPos;
		}
		else if (1 != iPos && '\0' == chArr[iIndex])
		{
			return 0;
		}
		else
		{
			++iPos;
		}
	}
	
	return 0;
}

int main(int argc, char *argv[])
{
	double d = 0.001;
	cout.setf(ios::fixed);
	cout.precision(6);
	cout << d << "\t :" << getDoubleAccuracy(d) << endl;
	
	d = 0.08001;
	cout << d << "\t :" << getDoubleAccuracy(d) << endl;
	
	d = 0.00120;
	cout << d << "\t :" << getDoubleAccuracy(d) << endl;
	
	d = 1.00;
	cout << d << "\t :" << getDoubleAccuracy(d) << endl;
	
	d = 1;
	cout << d << "\t :" << getDoubleAccuracy(d) << endl;
	
	d = 1.0010;
	cout << d << "\t :" << getDoubleAccuracy(d) << endl;
	
	d = 0.10;
	cout << d << "\t :" << getDoubleAccuracy(d) << endl;
	
	getchar();
	return 0;
}
相關文章
相關標籤/搜索