QLocale: Fix double conversion snippet

* QString("1234,56").toDouble(&ok); always operates
  in the "C" locale and therefore ok is always false
* Explicitly state that the return value is zero
  when ok is set to false
* Made snippet compileable by giving str a type

Pick-to: 5.15
Change-Id: I403eb39ca78a5f9ceb92ccd8ac3539581294796c
Reviewed-by: Sze Howe Koh <szehowe.koh@gmail.com>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
This commit is contained in:
Andre Hartmann 2020-08-17 15:01:58 +02:00
parent 41a716ebbf
commit 6bd157c0f5

View File

@ -67,15 +67,15 @@ bool ok;
double d; double d;
QLocale::setDefault(QLocale::C); QLocale::setDefault(QLocale::C);
d = QString("1234,56").toDouble(&ok); // ok == false d = QString("1234,56").toDouble(&ok); // ok == false, d == 0
d = QString("1234.56").toDouble(&ok); // ok == true, d == 1234.56 d = QString("1234.56").toDouble(&ok); // ok == true, d == 1234.56
QLocale::setDefault(QLocale::German); QLocale::setDefault(QLocale::German);
d = QString("1234,56").toDouble(&ok); // ok == true, d == 1234.56 d = QString("1234,56").toDouble(&ok); // ok == false, d == 0
d = QString("1234.56").toDouble(&ok); // ok == true, d == 1234.56 d = QString("1234.56").toDouble(&ok); // ok == true, d == 1234.56
QLocale::setDefault(QLocale(QLocale::English, QLocale::UnitedStates)); QLocale::setDefault(QLocale(QLocale::English, QLocale::UnitedStates));
str = QString("%1 %L2 %L3") QString str = QString("%1 %L2 %L3")
.arg(12345).arg(12345).arg(12345, 0, 16); .arg(12345).arg(12345).arg(12345, 0, 16);
// str == "12345 12,345 3039" // str == "12345 12,345 3039"
//! [1] //! [1]
@ -94,12 +94,12 @@ double d;
QLocale c(QLocale::C); QLocale c(QLocale::C);
d = c.toDouble("1234.56", &ok); // ok == true, d == 1234.56 d = c.toDouble("1234.56", &ok); // ok == true, d == 1234.56
d = c.toDouble("1,234.56", &ok); // ok == true, d == 1234.56 d = c.toDouble("1,234.56", &ok); // ok == true, d == 1234.56
d = c.toDouble( "1234,56", &ok ); // ok == false d = c.toDouble("1234,56", &ok); // ok == false, d == 0
QLocale german(QLocale::German); QLocale german(QLocale::German);
d = german.toDouble("1234,56", &ok); // ok == true, d == 1234.56 d = german.toDouble("1234,56", &ok); // ok == true, d == 1234.56
d = german.toDouble("1.234,56", &ok); // ok == true, d == 1234.56 d = german.toDouble("1.234,56", &ok); // ok == true, d == 1234.56
d = german.toDouble( "1234.56", &ok ); // ok == false d = german.toDouble("1234.56", &ok); // ok == false, d == 0
d = german.toDouble("1.234", &ok); // ok == true, d == 1234.0 d = german.toDouble("1.234", &ok); // ok == true, d == 1234.0
//! [3] //! [3]
@ -111,12 +111,12 @@ double d;
QLocale c(QLocale::C); QLocale c(QLocale::C);
d = c.toDouble(u"1234.56", &ok); // ok == true, d == 1234.56 d = c.toDouble(u"1234.56", &ok); // ok == true, d == 1234.56
d = c.toDouble(u"1,234.56", &ok); // ok == true, d == 1234.56 d = c.toDouble(u"1,234.56", &ok); // ok == true, d == 1234.56
d = c.toDouble(u"1234,56", &ok); // ok == false d = c.toDouble(u"1234,56", &ok); // ok == false, d == 0
QLocale german(QLocale::German); QLocale german(QLocale::German);
d = german.toDouble(u"1234,56", &ok); // ok == true, d == 1234.56 d = german.toDouble(u"1234,56", &ok); // ok == true, d == 1234.56
d = german.toDouble(u"1.234,56", &ok); // ok == true, d == 1234.56 d = german.toDouble(u"1.234,56", &ok); // ok == true, d == 1234.56
d = german.toDouble(u"1234.56", &ok); // ok == false d = german.toDouble(u"1234.56", &ok); // ok == false, d == 0
d = german.toDouble(u"1.234", &ok); // ok == true, d == 1234.0 d = german.toDouble(u"1.234", &ok); // ok == true, d == 1234.0
//! [3-qstringview] //! [3-qstringview]