Die privaten Member-Funktionen DoubleToString, CStringToDouble und StripEndingZero dienen der Umwandlung von m_dValue in m_strValue und umgekehrt. Die Routinen führen die Konvertierung eleganterweise nicht selber aus, sondern delegieren diese Arbeit an die Klassen std::istringstream bzw. std::ostringstream weiter, allerdings unter Berücksichtigung der Einheit.
double CHertzEdit::CStringToDouble(CString &str){        double d;
        if (((m_bNegativAllowed==FALSE) && (str.FindOneOf("-") != -1)) ||                (str.CompareNoCase("invalid") == 0))        {                d=-1.0;        }        else        {                // String in Stream kopieren                int i=str.GetLength();                std::istringstream ist(str.GetBuffer(i));                str.ReleaseBuffer();
                double d1;                char c[3];
                // Wert und Einheit trennen                ist >> d1 >> c;                CString strEinheit(c);
                // Wert anhand der Einheit anpassen                if (!strEinheit.CompareNoCase("Hz"))                {                        d=d1;                }                else if (!strEinheit.CompareNoCase("kHz"))                {                        d=d1*1000.0;                }                else if (!strEinheit.CompareNoCase("MHz"))                {                        d=d1*1000000.0;                }        }        return(d);}
std::string CHertzEdit::DoubleToString(double d){        double d1, d2;
        std::ostringstream ost;        ost.setf(std::ios_base::fixed, std::ios_base::floatfield);
        d2=fabs(d);
        if (d < 0.0 && !m_bNegativAllowed)        {                ost << "Invalid" << std::ends;        }        else if (d2 < 1000.0) // Hz-Bereich        {                d1 = d;                ost << std::setprecision(1);                ost << d1;                StripEndingZero(ost);                ost << " Hz" << std::ends;        }        else if (d2 < 1000000.0) // Khz-Bereich        {                d1 = d / 1000.0;                ost << std::setprecision(4);                ost << d1;                StripEndingZero(ost);                ost << " KHz" << std::ends;        }        else if (d2 > 10.0e9) // zu gro? fuer format::fixed        {                ost << "Invalid" << std::ends;        }        else // MHz-Bereich        {                d1 = d / 1000000.0;                ost << std::setprecision(7);                ost << d1;                StripEndingZero(ost);                ost << " MHz" << std::ends;        }        return(ost.str());
}
void CHertzEdit::StripEndingZero(std::ostringstream &oststr){        std::string strString= oststr.str();        std::string::iterator it = strString.end();        --it;
         // Letztes Zeichen == '0' ?         while ( *(it) == '0' && it != strString.begin())        {                // ja                // ist davor der '.' ?                if ( *(it-1) != '.')                {                        // nein => weg damit                        strString.erase(it);                        it = strString.end();                        --it;                }                else                {                        // ja => '0' dranlassen (z.B. 1.0)                        break;                }        }        // nein => nichts machen        // oststr neu initialisieren        oststr.seekp(0);        oststr << strString;}