Browse Source

simplify float convert

Xargin 8 years ago
parent
commit
3f35bed884
2 changed files with 6 additions and 44 deletions
  1. 4 42
      feature_any_string.go
  2. 2 2
      jsoniter_any_float_test.go

+ 4 - 42
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 {

+ 2 - 2
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,