diff --git a/src/blackmisc/pqstring.cpp b/src/blackmisc/pqstring.cpp index 7391e7f33..9f0f7e475 100644 --- a/src/blackmisc/pqstring.cpp +++ b/src/blackmisc/pqstring.cpp @@ -44,23 +44,7 @@ namespace BlackMisc if (unit.isEmpty() || number.isEmpty()) return v; bool success; - double numberD; - switch (mode) - { - case SeparatorsLocale: - numberD = QLocale::system().toDouble(number, &success); - break; - case SeparatorsCLocale: - numberD = number.toDouble(&success); - break; - case SeparatorsBestGuess: - numberD = number.toDouble(&success); - if (!success) numberD = QLocale::system().toDouble(number, &success); - break; - default: - qFatal("Wrong mode"); - break; - } + double numberD = parseNumber(number, success, mode); if (!success) return v; if (CMeasurementUnit::isValidUnitSymbol(unit)) @@ -119,5 +103,27 @@ namespace BlackMisc return v; } + double CPqString::parseNumber(const QString &number, bool &success, CPqString::SeparatorMode mode) + { + double numberD = -1; + switch (mode) + { + case SeparatorsLocale: + numberD = QLocale::system().toDouble(number, &success); + break; + case SeparatorsCLocale: + numberD = number.toDouble(&success); + break; + case SeparatorsBestGuess: + numberD = number.toDouble(&success); + if (!success) numberD = QLocale::system().toDouble(number, &success); + break; + default: + qFatal("Wrong mode"); + break; + } + return numberD; + } + } // namespace } // namespace diff --git a/src/blackmisc/pqstring.h b/src/blackmisc/pqstring.h index 261a974b2..70a79c70f 100644 --- a/src/blackmisc/pqstring.h +++ b/src/blackmisc/pqstring.h @@ -63,7 +63,7 @@ namespace BlackMisc PQ invalid; invalid.setNull(); if (value.isEmpty()) return invalid; - QVariant qv = CPqString::parseToVariant(value, mode); + QVariant qv = parseToVariant(value, mode); if (!qv.isNull() && qv.canConvert()) { return qv.value(); @@ -71,6 +71,9 @@ namespace BlackMisc return invalid; } + //! Locale aware parsing + static double parseNumber(const QString &number, bool &success, SeparatorMode mode = SeparatorsCLocale); + private: BLACK_ENABLE_TUPLE_CONVERSION(CPqString) QString m_string; diff --git a/src/blackmisc/simplecommandparser.cpp b/src/blackmisc/simplecommandparser.cpp index 2c09c2425..3805fdf06 100644 --- a/src/blackmisc/simplecommandparser.cpp +++ b/src/blackmisc/simplecommandparser.cpp @@ -8,6 +8,9 @@ */ #include "simplecommandparser.h" +#include "pqstring.h" + +using namespace BlackMisc::PhysicalQuantities; namespace BlackMisc { @@ -78,7 +81,7 @@ namespace BlackMisc const QString p = this->part(index); if (p.isEmpty()) return false; bool ok; - p.toDouble(&ok); + CPqString::parseNumber(p, ok, CPqString::SeparatorsBestGuess); return ok; } @@ -96,7 +99,7 @@ namespace BlackMisc const QString p = this->part(index); if (p.isEmpty()) return def; bool ok; - double d = p.toDouble(&ok); + double d = CPqString::parseNumber(p, ok, CPqString::SeparatorsBestGuess); return ok ? d : def; }