From: Brandon A. <br...@au...> - 2012-01-27 20:18:07
|
Hey again, I have another patch that I'm submitting for inclusion that I think will be useful. Often people have values between 0 and 1 that represent proportions that can be shown as percentage values. ie, 0.35 -> 35%. This patch adds an option to the format string that is "percent x" where x is the number of decimal places. It works just like the fix option except it multiples the value by 100 and sticks a % at the end. -Brandon --- src/gle/numberformat.cpp | 28 ++++++++++++++++++++++++++++ 1 files changed, 28 insertions(+), 0 deletions(-) diff --git a/src/gle/numberformat.cpp b/src/gle/numberformat.cpp index f192590..7abb375 100644 --- a/src/gle/numberformat.cpp +++ b/src/gle/numberformat.cpp @@ -79,6 +79,15 @@ public: virtual void format(double number, string* output); }; +class GLENumberFormatterPercent : public GLENumberFormatter { +protected: + int m_NbDecPlaces; +public: + virtual ~GLENumberFormatterPercent(); + virtual void parseOptions(GLENumberFormat* format); + virtual void format(double number, string* output); +}; + class GLENumberFormatterRound : public GLENumberFormatter { protected: int m_Sig; @@ -308,6 +317,22 @@ void GLENumberFormatterFix::format(double number, string* output) { doAll(output); } +GLENumberFormatterPercent::~GLENumberFormatterPercent() { +} + +void GLENumberFormatterPercent::parseOptions(GLENumberFormat* format) { + m_NbDecPlaces = format->nextInt(); +} + +void GLENumberFormatterPercent::format(double number, string* output) { + char format[20], result[100]; + sprintf(format, "%%.%df", m_NbDecPlaces); + sprintf(result, format, 100*number); + *output = result; + *output += "%"; + doAll(output); +} + GLENumberFormatterSci::GLENumberFormatterSci() { m_Mode = GLE_NF_SCI_SMALL_E; m_HasExpDigits = false; @@ -666,6 +691,9 @@ GLENumberFormat::GLENumberFormat(const string& formats) : if (name == "fix") { incTokens(); format = new GLENumberFormatterFix(); + } else if (name == "percent") { + incTokens(); + format = new GLENumberFormatterPercent(); } else if (name == "dec") { incTokens(); format = new GLENumberFormatterInt(GLE_NF_INT_DEC); -- 1.7.5.4 |