From c21a0bb0e42c008b1374b4620f661c8427fdaf33 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Mon, 18 Aug 2014 23:38:06 +0200 Subject: [PATCH] refs #314, compareQVariants checks for int to avoid rounding issues --- src/blackmisc/blackmiscfreefunctions.cpp | 30 ++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/blackmisc/blackmiscfreefunctions.cpp b/src/blackmisc/blackmiscfreefunctions.cpp index a5fec8701..8c1a05293 100644 --- a/src/blackmisc/blackmiscfreefunctions.cpp +++ b/src/blackmisc/blackmiscfreefunctions.cpp @@ -272,6 +272,36 @@ int BlackMisc::compareQVariants(const QVariant &v1, const QVariant &v2) } } + // integer types, handling not as double for rounding issues + if (v1.type() == QVariant::Int) + { + int i1 = v1.value(); + int i2 = v2.value(); + if (i1 == i2) return 0; + return i1 < i2 ? -1 : 1; + } + else if (v1.type() == QVariant::UInt) + { + uint i1 = v1.value(); + uint i2 = v2.value(); + if (i1 == i2) return 0; + return i1 < i2 ? -1 : 1; + } + else if (v1.type() == QVariant::LongLong) + { + long long i1 = v1.value(); + long long i2 = v2.value(); + if (i1 == i2) return 0; + return i1 < i2 ? -1 : 1; + } + else if (v1.type() == QVariant::ULongLong) + { + unsigned long long i1 = v1.value(); + unsigned long long i2 = v2.value(); + if (i1 == i2) return 0; + return i1 < i2 ? -1 : 1; + } + // all kind of numeric values if (v1.canConvert()) {