From 1d111091b5906bd9067d8c8510fc9a7fc2af10aa Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Mon, 30 Jun 2014 23:25:27 -0700 Subject: Make QTextStream use group separators in floating-point numbers Like for integers, this is activated only on QLocales other than C. [ChangeLog][QtCore][QTextStream] QTextStream now uses group separators when writing floating-point numbers when the locale is not the C locale. The old behavior can be restored by setting QLocale::OmitGroupSeparator on the locale. Change-Id: Ie451b91017746c3a9b11b6211b2ddd09cd295cd2 Reviewed-by: Oswald Buddenhagen Reviewed-by: Giuseppe D'Angelo --- src/corelib/io/qtextstream.cpp | 2 ++ .../corelib/io/qtextstream/tst_qtextstream.cpp | 22 +++++++++++++++------- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/corelib/io/qtextstream.cpp b/src/corelib/io/qtextstream.cpp index 288a939ab2..24c22117fa 100644 --- a/src/corelib/io/qtextstream.cpp +++ b/src/corelib/io/qtextstream.cpp @@ -2414,6 +2414,8 @@ QTextStream &QTextStream::operator<<(double f) flags |= QLocaleData::CapitalEorX; if (numberFlags() & ForcePoint) flags |= QLocaleData::Alternate; + if (locale() != QLocale::c() && !(locale().numberOptions() & QLocale::OmitGroupSeparator)) + flags |= QLocaleData::ThousandsGroup; const QLocaleData *dd = d->locale.d->m_data; QString num = dd->doubleToString(f, d->params.realNumberPrecision, form, -1, flags); diff --git a/tests/auto/corelib/io/qtextstream/tst_qtextstream.cpp b/tests/auto/corelib/io/qtextstream/tst_qtextstream.cpp index 2ae085cb0b..64d35ef154 100644 --- a/tests/auto/corelib/io/qtextstream/tst_qtextstream.cpp +++ b/tests/auto/corelib/io/qtextstream/tst_qtextstream.cpp @@ -1788,8 +1788,6 @@ void tst_QTextStream::writeSeekWriteNoBOM() QCOMPARE(out16.buffer(), first); } - - // ------------------------------------------------------------------------------ void tst_QTextStream::generateOperatorCharData(bool for_QString) { @@ -2304,12 +2302,14 @@ void tst_QTextStream::generateRealNumbersDataWrite() { QTest::addColumn("number"); QTest::addColumn("data"); + QTest::addColumn("dataWithSeparators"); - QTest::newRow("0") << 0.0 << QByteArray("0"); - QTest::newRow("3.14") << 3.14 << QByteArray("3.14"); - QTest::newRow("-3.14") << -3.14 << QByteArray("-3.14"); - QTest::newRow("1.2e+10") << 1.2e+10 << QByteArray("1.2e+10"); - QTest::newRow("-1.2e+10") << -1.2e+10 << QByteArray("-1.2e+10"); + QTest::newRow("0") << 0.0 << QByteArray("0") << QByteArray("0"); + QTest::newRow("3.14") << 3.14 << QByteArray("3.14") << QByteArray("3.14"); + QTest::newRow("-3.14") << -3.14 << QByteArray("-3.14") << QByteArray("-3.14"); + QTest::newRow("1.2e+10") << 1.2e+10 << QByteArray("1.2e+10") << QByteArray("1.2e+10"); + QTest::newRow("-1.2e+10") << -1.2e+10 << QByteArray("-1.2e+10") << QByteArray("-1.2e+10"); + QTest::newRow("12345") << 12345. << QByteArray("12345") << QByteArray("12,345"); } // ------------------------------------------------------------------------------ @@ -2320,14 +2320,22 @@ void tst_QTextStream::generateRealNumbersDataWrite() { \ QFETCH(double, number); \ QFETCH(QByteArray, data); \ + QFETCH(QByteArray, dataWithSeparators); \ \ QBuffer buffer; \ buffer.open(QBuffer::WriteOnly); \ QTextStream stream(&buffer); \ + stream.setLocale(QLocale::c()); \ float f = (float)number; \ stream << f; \ stream.flush(); \ QCOMPARE(buffer.data().constData(), data.constData()); \ + \ + buffer.reset(); \ + stream.setLocale(QLocale("en-US")); \ + stream << f; \ + stream.flush(); \ + QCOMPARE(buffer.data(), dataWithSeparators); \ } IMPLEMENT_STREAM_LEFT_REAL_OPERATOR_TEST(float, float) IMPLEMENT_STREAM_LEFT_REAL_OPERATOR_TEST(double, float) -- cgit v1.2.3