• 浮点数小数点后开始非零数字的起始位置


    有这样一个问题:需要知道浮点数从小数点后,开始非零数字的起始位置。比如:1.05,非零位置就是2;0.004200,非零位置就是3。具体效果如下图:

    代码:

    #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 && '' != chArr[iIndex]; ++iIndex)
    	{
    		if ('.' == chArr[iIndex])
    		{
    			++iIndex;
    			break;
    		}
    	}
    	
    	// 检索小数点到有效位数之间的长度 
    	for (; iIndex < iLen && '' != chArr[iIndex]; ++iIndex)
    	{
    		if ('0' != chArr[iIndex])
    		{
    			return iPos;
    		}
    		else if (1 != iPos && '' == 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 << "	 :" << getDoubleAccuracy(d) << endl;
    	
    	d = 0.08001;
    	cout << d << "	 :" << getDoubleAccuracy(d) << endl;
    	
    	d = 0.00120;
    	cout << d << "	 :" << getDoubleAccuracy(d) << endl;
    	
    	d = 1.00;
    	cout << d << "	 :" << getDoubleAccuracy(d) << endl;
    	
    	d = 1;
    	cout << d << "	 :" << getDoubleAccuracy(d) << endl;
    	
    	d = 1.0010;
    	cout << d << "	 :" << getDoubleAccuracy(d) << endl;
    	
    	d = 0.10;
    	cout << d << "	 :" << getDoubleAccuracy(d) << endl;
    	
    	getchar();
    	return 0;
    }
    

      

  • 相关阅读:
    Alpha 答辩总结
    Alpha 冲刺 (10/10)
    Alpha 冲刺 (9/10)
    Alpha 冲刺 (8/10)
    Alpha 冲刺 (7/10)
    Alpha 冲刺 (6/10)
    团队作业-随堂小测(同学录)
    Alpha 冲刺 (5/10)
    第07组 Alpha事后诸葛亮
    第07组 Alpha冲刺(6/6)
  • 原文地址:https://www.cnblogs.com/hjsstudio/p/9211945.html
Copyright © 2020-2023  润新知