From 33f18a7c8f02c6d784e2b0ab8b1fbcc2742cde3f Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 19 Jan 2024 06:14:00 +0100 Subject: [PATCH] Show numbers with space as thousand separator --- .../Application/RiaMemoryCleanup.cpp | 5 ++++- .../Application/Tools/RiaStdStringTools.cpp | 20 +++++++++++++++++++ .../Application/Tools/RiaStdStringTools.h | 2 ++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/ApplicationLibCode/Application/RiaMemoryCleanup.cpp b/ApplicationLibCode/Application/RiaMemoryCleanup.cpp index 266b08d684..ee5d5bf64a 100644 --- a/ApplicationLibCode/Application/RiaMemoryCleanup.cpp +++ b/ApplicationLibCode/Application/RiaMemoryCleanup.cpp @@ -17,6 +17,7 @@ ///////////////////////////////////////////////////////////////////////////////// #include "RiaMemoryCleanup.h" +#include "RiaStdStringTools.h" #include "RigCaseCellResultsData.h" #include "RigEclipseResultInfo.h" @@ -399,9 +400,11 @@ std::pair RiaMemoryCleanup::createMemoryReport() size_t memory = valueCount * sizeof( double ); totalMemoryForCase += memory; + auto formattedValueCount = RiaStdStringTools::formatThousandGrouping( valueCount ); + caseReport += QString( " %1 MB\tValue count %2, %3\n" ) .arg( memory / 1024.0 / 1024.0, 0, 'f', 2 ) - .arg( valueCount ) + .arg( QString::fromStdString( formattedValueCount ) ) .arg( QString::fromStdString( name ) ); } } diff --git a/ApplicationLibCode/Application/Tools/RiaStdStringTools.cpp b/ApplicationLibCode/Application/Tools/RiaStdStringTools.cpp index 1f1bafb62f..42c3390898 100644 --- a/ApplicationLibCode/Application/Tools/RiaStdStringTools.cpp +++ b/ApplicationLibCode/Application/Tools/RiaStdStringTools.cpp @@ -138,6 +138,26 @@ bool RiaStdStringTools::startsWithAlphabetic( const std::string& s ) return isalpha( s[0] ) != 0; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::string RiaStdStringTools::formatThousandGrouping( long value ) +{ + class my_punct : public std::numpunct + { + protected: + virtual char do_decimal_point() const { return '.'; } + virtual char do_thousands_sep() const { return ' '; } + virtual std::string do_grouping() const { return std::string( "\3" ); } + }; + + std::ostringstream os; + os.imbue( std::locale( os.getloc(), new my_punct ) ); + fixed( os ); + os << value; + return os.str(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Application/Tools/RiaStdStringTools.h b/ApplicationLibCode/Application/Tools/RiaStdStringTools.h index 81afb1d528..2b0a82054a 100644 --- a/ApplicationLibCode/Application/Tools/RiaStdStringTools.h +++ b/ApplicationLibCode/Application/Tools/RiaStdStringTools.h @@ -43,6 +43,8 @@ public: static bool containsAlphabetic( const std::string& s ); static bool startsWithAlphabetic( const std::string& s ); + static std::string formatThousandGrouping( long value ); + // Conversion using fastest known approach static bool toDouble( const std::string_view& s, double& value ); static bool toInt( const std::string_view& s, int& value );