diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2016-08-19 12:26:44 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2016-09-16 09:21:47 +0000 |
commit | 54f4ac27a2a27975bb3e59cce946c6a24a1a6e44 (patch) | |
tree | 20dd56bdb0de77719e955110516cceb5fc153cb4 /src/qml/jsruntime/qv4numberobject.cpp | |
parent | 6c74ce6c356f5ee2a61d280f0aa22325e273693b (diff) |
V4: Use QLocale::IncludeTrailingZeroesAfterDot for number conversion
This permits us to drop the post processing of generated numbers and
the detour through QString::asprintf().
Change-Id: I78bd31788f41a3e351408e19856ba58cf7d798c9
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/jsruntime/qv4numberobject.cpp')
-rw-r--r-- | src/qml/jsruntime/qv4numberobject.cpp | 24 |
1 files changed, 4 insertions, 20 deletions
diff --git a/src/qml/jsruntime/qv4numberobject.cpp b/src/qml/jsruntime/qv4numberobject.cpp index f8e0d8763b..444a4cd6f0 100644 --- a/src/qml/jsruntime/qv4numberobject.cpp +++ b/src/qml/jsruntime/qv4numberobject.cpp @@ -63,7 +63,9 @@ NumberLocale::NumberLocale() : QLocale(QLocale::C), // -128 means shortest string that can accurately represent the number. defaultDoublePrecision(0xffffff80) { - setNumberOptions(QLocale::OmitGroupSeparator | QLocale::OmitLeadingZeroInExponent); + setNumberOptions(QLocale::OmitGroupSeparator | + QLocale::OmitLeadingZeroInExponent | + QLocale::IncludeTrailingZeroesAfterDot); } const NumberLocale *NumberLocale::instance() @@ -291,24 +293,6 @@ ReturnedValue NumberPrototype::method_toPrecision(CallContext *ctx) return ctx->engine()->throwRangeError(error); } - // TODO: Once we get a NumberOption to retain trailing zeroes, replace the code below with: - // QString result = NumberLocale::instance()->toString(v->asDouble(), 'g', precision); - QByteArray format = "%#." + QByteArray::number(precision) + "g"; - QString result = QString::asprintf(format.constData(), v->asDouble()); - if (result.endsWith(QLatin1Char('.'))) { - // This is 'f' notation, not 'e'. - result.chop(1); - } else { - int ePos = result.indexOf(QLatin1Char('e')); - if (ePos != -1) { - Q_ASSERT(ePos + 2 < result.length()); // always '+' or '-', and number, after 'e' - Q_ASSERT(ePos > 0); // 'e' is not the first character - - if (result.at(ePos + 2) == QLatin1Char('0')) // Drop leading zeroes in exponent - result = result.remove(ePos + 2, 1); - if (result.at(ePos - 1) == QLatin1Char('.')) // Drop trailing dots before 'e' - result = result.remove(ePos - 1, 1); - } - } + QString result = NumberLocale::instance()->toString(v->asDouble(), 'g', precision); return scope.engine->newString(result)->asReturnedValue(); } |