Wie zu stoppen Doppel-Umwandlung in die wissenschaftliche Schreibweise, wenn mit einem stringstream

Mache ich ein Funktion geben Sie die Anzahl der Dezimalstellen und die gesamte Anzahl von Ziffern und bin Umwandlung der eingefügten typename Zahl in eine Zeichenfolge mit sstreams.

Jedoch ist die Anzahl bei der Konvertierung in ein string kommt in wissenschaftlichen Notationen, die nicht nützlich für das zählen der Anzahl der Ziffern, die sind in der normalen Zahl. Wie kann ich dies verhindern in meiner Funktion unten?

enum { DECIMALS = 10, WHOLE_NUMBS = 20, ALL = 30 };

template < typename T > int Numbs_Digits(T numb, int scope)
{
    stringstream ss(stringstream::in | stringstream::out);
    stringstream ss2(stringstream::in | stringstream::out);
    unsigned long int length = 0;
    unsigned long int numb_wholes;

    ss2 << (int) numb;
    numb_wholes = ss2.str().length();
    ss2.flush();
    bool all = false;

    switch (scope) {
    case ALL:
        all = true;

    case DECIMALS:
        ss << numb;
        length += ss.str().length() - (numb_wholes + 1);  //+1 for the "."
        if (all != true)
            break;

    case WHOLE_NUMBS:
        length += numb_wholes;
        if (all != true)
            break;

    default:
        break;
    }
    return length;
}
InformationsquelleAutor Griffin | 2011-05-15
Schreibe einen Kommentar