有這樣一個問題:須要知道浮點數從小數點後,開始非零數字的起始位置。好比: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; }