summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKarim Pinter <karim.pinter@qt.io>2017-02-02 14:16:16 +0200
committerKarim Pinter <karim.pinter@qt.io>2017-02-08 07:04:25 +0000
commitf6e5f6eaf2eb958aa043440c8941b25339644360 (patch)
tree1c7faee89ee0926a0146319c728b1144e5aaf1dd /src
parent57a1b273a42746755bbcd93a74245d17afd81625 (diff)
downloadqtxmlpatterns-f6e5f6eaf2eb958aa043440c8941b25339644360.tar.gz
Fix previous fix for trailing 0 handling
The previous fix, 82c5cc6532ac5d0323ecda94b6767e1fdaef2639, wasn't handling properly double conversion to string, this change is rather going through the characters instead. It also adds new test cases. Task-number: QTBUG-58245 Change-Id: I1563d541b0c9fef1254b5fb728308fb2517ed3aa Reviewed-by: Andy Shaw <andy.shaw@qt.io> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/xmlpatterns/schema/qxsdtypechecker.cpp14
1 files changed, 7 insertions, 7 deletions
diff --git a/src/xmlpatterns/schema/qxsdtypechecker.cpp b/src/xmlpatterns/schema/qxsdtypechecker.cpp
index d6b224f..d165a1f 100644
--- a/src/xmlpatterns/schema/qxsdtypechecker.cpp
+++ b/src/xmlpatterns/schema/qxsdtypechecker.cpp
@@ -150,14 +150,14 @@ static int totalDigitsForDecimal(const QString &lexicalValue)
static int fractionDigitsForDecimal(const QString &lexicalValue)
{
- // we use the lexical value here, as the conversion to double might strip
- // away decimal positions
- bool ok = false;
- double dbl = lexicalValue.toDouble(&ok);
- if (!ok)
+ const int pos = lexicalValue.indexOf(QLatin1Char('.'));
+ if (pos == -1)
return 0;
- dbl = dbl - qFloor(dbl);
- return QString::number(dbl).length() - 2;
+ const QStringRef fraction = QStringRef(&lexicalValue).mid(pos).trimmed();
+ int i = fraction.length() - 1; // fraction[0] is '.' so fraction is not empty
+ while (fraction.at(i) == QLatin1Char('0'))
+ --i;
+ return i; // The significant fraction-digits are fraction[1 through i].
}
XsdTypeChecker::XsdTypeChecker(const XsdSchemaContext::Ptr &context, const QVector<QXmlName> &namespaceBindings, const QSourceLocation &location)