From aa0494831941151ffd71844c000a38c52b0fe1d4 Mon Sep 17 00:00:00 2001 From: fangjw Date: Tue, 25 May 2021 16:10:52 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=B5=AE=E7=82=B9?= =?UTF-8?q?=E5=9E=8B=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原因: 返回值,强制转成 int 类型,会导致浮点型比较不准确,例如:0.33,转成 int 类型时,会变成 0 --- util/gutil/gutil_comparator.go | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/util/gutil/gutil_comparator.go b/util/gutil/gutil_comparator.go index 3c902d601..9c9280790 100644 --- a/util/gutil/gutil_comparator.go +++ b/util/gutil/gutil_comparator.go @@ -77,12 +77,28 @@ func ComparatorUint64(a, b interface{}) int { // ComparatorFloat32 provides a basic comparison on float32. func ComparatorFloat32(a, b interface{}) int { - return int(gconv.Float32(a) - gconv.Float32(b)) + aFloat := gconv.Float64(a) + bFloat := gconv.Float64(b) + if aFloat == bFloat{ + return 0 + } + if aFloat > bFloat{ + return 1 + } + return -1 } // ComparatorFloat64 provides a basic comparison on float64. func ComparatorFloat64(a, b interface{}) int { - return int(gconv.Float64(a) - gconv.Float64(b)) + aFloat := gconv.Float64(a) + bFloat := gconv.Float64(b) + if aFloat == bFloat{ + return 0 + } + if aFloat > bFloat{ + return 1 + } + return -1 } // ComparatorByte provides a basic comparison on byte. From 7b327910065a1d6ab7bfa33392db2c011cb3b3ef Mon Sep 17 00:00:00 2001 From: fangjw Date: Tue, 25 May 2021 16:15:02 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=B5=AE=E7=82=B9?= =?UTF-8?q?=E5=9E=8B=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原因: 返回值,强制转成 int 类型,会导致浮点型比较不准确,例如:0.33,转成 int 类型时,会变成 0 --- util/gutil/gutil_comparator.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/util/gutil/gutil_comparator.go b/util/gutil/gutil_comparator.go index 9c9280790..39c364868 100644 --- a/util/gutil/gutil_comparator.go +++ b/util/gutil/gutil_comparator.go @@ -79,10 +79,10 @@ func ComparatorUint64(a, b interface{}) int { func ComparatorFloat32(a, b interface{}) int { aFloat := gconv.Float64(a) bFloat := gconv.Float64(b) - if aFloat == bFloat{ + if aFloat == bFloat { return 0 } - if aFloat > bFloat{ + if aFloat > bFloat { return 1 } return -1 @@ -92,10 +92,10 @@ func ComparatorFloat32(a, b interface{}) int { func ComparatorFloat64(a, b interface{}) int { aFloat := gconv.Float64(a) bFloat := gconv.Float64(b) - if aFloat == bFloat{ + if aFloat == bFloat { return 0 } - if aFloat > bFloat{ + if aFloat > bFloat { return 1 } return -1 From e3f5c9175cc5086788b1a98c73a4dc21ae99871b Mon Sep 17 00:00:00 2001 From: fangjw Date: Wed, 2 Jun 2021 09:17:50 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E8=A1=A5=E5=85=85=E6=B5=AE=E7=82=B9?= =?UTF-8?q?=E6=95=B0=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- util/gutil/gutil_z_unit_comparator_test.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/util/gutil/gutil_z_unit_comparator_test.go b/util/gutil/gutil_z_unit_comparator_test.go index 4538ba22b..67a1a74a6 100755 --- a/util/gutil/gutil_z_unit_comparator_test.go +++ b/util/gutil/gutil_z_unit_comparator_test.go @@ -160,3 +160,20 @@ func Test_ComparatorTime(t *testing.T) { t.Assert(l, -1) }) } + +func Test_ComparatorFloat32OfFixed(t *testing.T) { + gtest.C(t, func(t *gtest.T) { + t.Assert(gutil.ComparatorFloat32(0.1, 0.1), 0) + t.Assert(gutil.ComparatorFloat32(1.1, 2.1), -1) + t.Assert(gutil.ComparatorFloat32(2.1, 1.1), 1) + }) +} + +func Test_ComparatorFloat64OfFixed(t *testing.T) { + + gtest.C(t, func(t *gtest.T) { + t.Assert(gutil.ComparatorFloat32(0.1, 0.1), 0) + t.Assert(gutil.ComparatorFloat32(1.1, 2.1), -1) + t.Assert(gutil.ComparatorFloat32(2.1, 1.1), 1) + }) +} \ No newline at end of file From ee3d375532eba1baa20777e181861572ac27ba79 Mon Sep 17 00:00:00 2001 From: fangjw Date: Wed, 2 Jun 2021 09:18:52 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E8=A1=A5=E5=85=85=E6=B5=AE=E7=82=B9?= =?UTF-8?q?=E6=95=B0=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- util/gutil/gutil_z_unit_comparator_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/util/gutil/gutil_z_unit_comparator_test.go b/util/gutil/gutil_z_unit_comparator_test.go index 67a1a74a6..db6ad9092 100755 --- a/util/gutil/gutil_z_unit_comparator_test.go +++ b/util/gutil/gutil_z_unit_comparator_test.go @@ -172,8 +172,8 @@ func Test_ComparatorFloat32OfFixed(t *testing.T) { func Test_ComparatorFloat64OfFixed(t *testing.T) { gtest.C(t, func(t *gtest.T) { - t.Assert(gutil.ComparatorFloat32(0.1, 0.1), 0) - t.Assert(gutil.ComparatorFloat32(1.1, 2.1), -1) - t.Assert(gutil.ComparatorFloat32(2.1, 1.1), 1) + t.Assert(gutil.ComparatorFloat64(0.1, 0.1), 0) + t.Assert(gutil.ComparatorFloat64(1.1, 2.1), -1) + t.Assert(gutil.ComparatorFloat64(2.1, 1.1), 1) }) -} \ No newline at end of file +}