1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/numformatter.h
3 // Purpose: wxNumberFormatter class
4 // Author: Fulvio Senore, Vadim Zeitlin
6 // Copyright: (c) 2010 wxWidgets team
7 // Licence: wxWindows licence
8 /////////////////////////////////////////////////////////////////////////////
10 #ifndef _WX_NUMFORMATTER_H_
11 #define _WX_NUMFORMATTER_H_
13 #include "wx/string.h"
15 // Helper class for formatting numbers with thousands separators which also
16 // supports parsing the numbers formatted by it.
17 class WXDLLIMPEXP_BASE wxNumberFormatter
20 // Bit masks for ToString()
24 Style_WithThousandsSep
= 0x01,
25 Style_NoTrailingZeroes
= 0x02 // Only for floating point numbers
28 // Format a number as a string. By default, the thousands separator is
29 // used, specify Style_None to prevent this. For floating point numbers,
30 // precision can also be specified.
31 static wxString
ToString(long val
,
32 int style
= Style_WithThousandsSep
);
33 #ifdef wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG
34 static wxString
ToString(wxLongLong_t val
,
35 int style
= Style_WithThousandsSep
);
36 #endif // wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG
37 static wxString
ToString(double val
,
39 int style
= Style_WithThousandsSep
);
41 // Parse a string representing a number, possibly with thousands separator.
43 // Return true on success and stores the result in the provided location
44 // which must be a valid non-NULL pointer.
45 static bool FromString(wxString s
, long *val
);
46 #ifdef wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG
47 static bool FromString(wxString s
, wxLongLong_t
*val
);
48 #endif // wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG
49 static bool FromString(wxString s
, double *val
);
52 // Get the decimal separator for the current locale. It is always defined
53 // and we fall back to returning '.' in case of an error.
54 static wxChar
GetDecimalSeparator();
56 // Get the thousands separator if grouping of the digits is used by the
57 // current locale. The value returned in sep should be only used if the
58 // function returns true.
59 static bool GetThousandsSeparatorIfUsed(wxChar
*sep
);
62 // Post-process the string representing an integer.
63 static wxString
PostProcessIntString(wxString s
, int style
);
65 // Add the thousands separators to a string representing a number without
66 // the separators. This is used by ToString(Style_WithThousandsSep).
67 static void AddThousandsSeparators(wxString
& s
);
69 // Remove trailing zeroes and, if there is nothing left after it, the
70 // decimal separator itself from a string representing a floating point
71 // number. Also used by ToString().
72 static void RemoveTrailingZeroes(wxString
& s
);
74 // Remove all thousands separators from a string representing a number.
75 static void RemoveThousandsSeparators(wxString
& s
);
78 #endif // _WX_NUMFORMATTER_H_