Add wxNumberFormatter::Format() for floating point numbers
The existing ToString() is not flexible enough to be used in wxGrid, which supports specifying the width (and not just the precision) as well as using formats other than "%g" and "%f" which are the only ones supported by the existing function. Note that currently the implementation simply calls wxString::Format() and then adjusts the decimal separator, but it could, in principle, use wxUILocale methods for formatting the floating point numbers using native platform functions for doing this, e.g. CFNumberFormatter under macOS.
This commit is contained in:
@@ -40,6 +40,13 @@ public:
|
||||
int precision,
|
||||
int style = Style_WithThousandsSep);
|
||||
|
||||
// Format the given number using one of the floating point formats and
|
||||
// ensure that the result uses the correct decimal separator.
|
||||
// Prefer using ToString() if possible, i.e. if format is "%g" or "%.Nf"
|
||||
// which are supported by it directly.
|
||||
static wxString Format(const wxString& format, double val);
|
||||
|
||||
|
||||
// Parse a string representing a number, possibly with thousands separator.
|
||||
//
|
||||
// Return true on success and stores the result in the provided location
|
||||
|
@@ -93,6 +93,16 @@ public:
|
||||
static wxString
|
||||
ToString(double val, int precision, int flags = Style_WithThousandsSep);
|
||||
|
||||
/**
|
||||
Format the given number using one of the floating point formats and
|
||||
ensure that the result uses the correct decimal separator.
|
||||
|
||||
Prefer using ToString() if possible, i.e. if format is "%g" or "%.Nf"
|
||||
which are supported by it directly.
|
||||
|
||||
@since 3.1.6
|
||||
*/
|
||||
static wxString Format(const wxString& format, double val);
|
||||
|
||||
/**
|
||||
Parse a string representation of a number possibly including thousands
|
||||
|
@@ -155,6 +155,23 @@ wxString wxNumberFormatter::ToString(double val, int precision, int style)
|
||||
return s;
|
||||
}
|
||||
|
||||
wxString wxNumberFormatter::Format(const wxString& format, double val)
|
||||
{
|
||||
wxString s = wxString::Format(format, val);
|
||||
|
||||
const wxChar sep = GetDecimalSeparator();
|
||||
if ( s.find(sep) == wxString::npos )
|
||||
{
|
||||
const wxChar other = sep == '.' ? ',' : '.';
|
||||
const size_t posSep = s.find(other);
|
||||
if ( posSep != wxString::npos )
|
||||
s[posSep] = sep;
|
||||
}
|
||||
//else: it already uses the correct separator
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
void wxNumberFormatter::AddThousandsSeparators(wxString& s)
|
||||
{
|
||||
// Thousands separators for numbers in scientific format are not relevant.
|
||||
|
Reference in New Issue
Block a user