X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/17a8f66c75cf27b77f1bffe3b226a827774f69e8..2631773e8220c863a57beaa29eece92db31c1edf:/src/common/string.cpp diff --git a/src/common/string.cpp b/src/common/string.cpp index fa7bb0c2f8..6cfea4102c 100644 --- a/src/common/string.cpp +++ b/src/common/string.cpp @@ -1839,17 +1839,43 @@ bool wxString::ToCDouble(double *pVal) const // ---------------------------------------------------------------------------- /* static */ -wxString wxString::FromCDouble(double val) +wxString wxString::FromDouble(double val, int precision) { + wxCHECK_MSG( precision >= -1, wxString(), "Invalid negative precision" ); + + wxString format; + if ( precision == -1 ) + { + format = "%g"; + } + else // Use fixed precision. + { + format.Printf("%%.%df", precision); + } + + return wxString::Format(format, val); +} + +/* static */ +wxString wxString::FromCDouble(double val, int precision) +{ + wxCHECK_MSG( precision >= -1, wxString(), "Invalid negative precision" ); + #if wxUSE_STD_IOSTREAM && wxUSE_STD_STRING // We assume that we can use the ostream and not wstream for numbers. wxSTD ostringstream os; + if ( precision != -1 ) + { + os.precision(precision); + os.setf(std::ios::fixed, std::ios::floatfield); + } + os << val; return os.str(); #else // !wxUSE_STD_IOSTREAM // Can't use iostream locale support, fall back to the manual method // instead. - wxString s = FromDouble(val); + wxString s = FromDouble(val, precision); #if wxUSE_INTL wxString sep = wxLocale::GetInfo(wxLOCALE_DECIMAL_POINT, wxLOCALE_CAT_NUMBER);