From 3f35bed8841edce1a132e135a7afc0d5c77d8e40 Mon Sep 17 00:00:00 2001 From: Xargin Date: Tue, 4 Jul 2017 22:28:24 +0800 Subject: [PATCH] simplify float convert --- feature_any_string.go | 46 ++++---------------------------------- jsoniter_any_float_test.go | 4 ++-- 2 files changed, 6 insertions(+), 44 deletions(-) diff --git a/feature_any_string.go b/feature_any_string.go index 13c9ad0..c58dda2 100644 --- a/feature_any_string.go +++ b/feature_any_string.go @@ -119,51 +119,13 @@ func (any *stringAny) ToUint64() uint64 { } func (any *stringAny) ToFloat32() float32 { - return float32(any.ToFloat64()) + parsed, _ := strconv.ParseFloat(any.val, 32) + return float32(parsed) } func (any *stringAny) ToFloat64() float64 { - if any.val == "" { - return 0 - } - - startPos := 0 - endPos := 0 - flag := 1 - - if any.val[0] == '+' || any.val[0] == '-' { - startPos = 1 - } - - if any.val[0] == '-' { - flag = -1 - } - - pointOccurCnt := 0 - pointPos := -1 - - for i := startPos; i < len(any.val); i++ { - if any.val[i] >= '0' && any.val[i] <= '9' { - endPos = i + 1 - } else if any.val[i] == '.' && pointOccurCnt == 0 { - endPos = i + 1 - pointOccurCnt++ - pointPos = i - } else { - break - } - } - - if pointPos == endPos-1 { - endPos-- - } - - if endPos <= startPos { - return 0 - } - - parsed, _ := strconv.ParseFloat(any.val[startPos:endPos], 64) - return float64(flag) * parsed + parsed, _ := strconv.ParseFloat(any.val, 64) + return parsed } func (any *stringAny) ToString() string { diff --git a/jsoniter_any_float_test.go b/jsoniter_any_float_test.go index 4e892e6..d87c076 100644 --- a/jsoniter_any_float_test.go +++ b/jsoniter_any_float_test.go @@ -15,9 +15,9 @@ var floatConvertMap = map[string]float64{ `"false"`: 0, "123": 123, - `"123true"`: 123, + `"123true"`: 0, - `"-123true"`: -123, + `"-123true"`: 0, "0": 0, `"0"`: 0, "-1": -1,