From 2b6628bdf81e21474cb686c21edc84715b62dd0c Mon Sep 17 00:00:00 2001 From: Martin Brodbeck Date: Thu, 7 Jul 2022 16:53:44 +0200 Subject: [PATCH] Using fmt for currency --- src/core/CMakeLists.txt | 6 ++++-- src/core/utils.cpp | 14 ++++++++++++-- src/core/utils.h | 2 +- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 0e4b100..dac5c00 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -7,6 +7,8 @@ find_package(SQLite3 REQUIRED) set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads REQUIRED) +find_package(fmt) + if (MINGW) find_package(XLNT REQUIRED STATIC) @@ -34,10 +36,10 @@ set(CORE_SOURCES add_library(core STATIC ${CORE_SOURCES}) target_include_directories(core PRIVATE ${PROJECT_SOURCE_DIR}/subprojects/csv-parser/single_include) if (WIN32) - target_link_libraries(core PRIVATE Boost::boost Boost::date_time sqlite3 nlohmann_json::nlohmann_json ${XLNT_LIBRARY} Threads::Threads) + target_link_libraries(core PRIVATE Boost::boost Boost::date_time sqlite3 nlohmann_json::nlohmann_json ${XLNT_LIBRARY} Threads::Threads fmt::fmt) target_link_libraries(core PRIVATE bcrypt) else() - target_link_libraries(core PRIVATE Boost::boost Boost::date_time sqlite3 nlohmann_json::nlohmann_json ${XLNT_LIBRARIES} Threads::Threads) + target_link_libraries(core PRIVATE Boost::boost Boost::date_time sqlite3 nlohmann_json::nlohmann_json ${XLNT_LIBRARIES} Threads::Threads fmt::fmt) endif() target_include_directories(core PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/..) diff --git a/src/core/utils.cpp b/src/core/utils.cpp index 58985ef..6e5d629 100644 --- a/src/core/utils.cpp +++ b/src/core/utils.cpp @@ -1,16 +1,23 @@ #include "utils.h" #include +#include +#include #include #include +#include + +using namespace fmt; + std::string formatCentAsEuroString(const int cent, int width) { - std::stringstream currStream; + /*std::stringstream currStream; try { std::locale myLocale("de_DE.utf8"); currStream.imbue(myLocale); + std::cout << ">>> " << fmt::format(myLocale, "{:6.2Lf}", 1.12345) << '\n'; currStream << std::right << std::setw(width) << std::showbase << std::put_money(cent, false); } catch (std::runtime_error &err) { @@ -18,7 +25,10 @@ std::string formatCentAsEuroString(const int cent, int width) << std::setprecision(2) << cent / 100.0L << " €"; } - return currStream.str(); + return currStream.str();*/ + + std::locale myLocale{"de_DE.utf8"}; + return fmt::format(myLocale, "{:{}.2Lf} €", cent / 100.0L, width); } std::string <rim(std::string &str, const std::string &chars) diff --git a/src/core/utils.h b/src/core/utils.h index 36790d2..3a9ac21 100644 --- a/src/core/utils.h +++ b/src/core/utils.h @@ -5,7 +5,7 @@ #include #include -std::string formatCentAsEuroString(const int cent, int width = 10); +std::string formatCentAsEuroString(const int cent, int width = 6); std::string <rim(std::string &str, const std::string &chars = "\t\n\v\f\r "); std::string &rtrim(std::string &str, const std::string &chars = "\t\n\v\f\r "); std::string &trim(std::string &str, const std::string &chars = "\t\n\v\f\r ");