{"record":{"id":"bf565eb8364db797","repo":"SigNoz/signoz","slug":"invalid-data-type-expected-float-got-v","errorCode":null,"errorMessage":"invalid data type, expected float, got %v","messagePattern":"invalid data type, expected float, got (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/query-service/utils/format.go","lineNumber":120,"sourceCode":"\t\tcase float64:\n\t\t\treturn int64(x), nil\n\t\tcase string:\n\t\t\tint64val, err := strconv.ParseInt(x, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"invalid data type, expected int, got %v\", reflect.TypeOf(v))\n\t\t\t}\n\t\t\treturn int64val, nil\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"invalid data type, expected int, got %v\", reflect.TypeOf(v))\n\t\t}\n\tcase v3.AttributeKeyDataTypeFloat64:\n\t\tswitch x := v.(type) {\n\t\tcase []interface{}:\n\t\t\tfor i, val := range x {\n\t\t\t\tif _, ok := val.(string); ok {\n\t\t\t\t\tfloat64val, err := strconv.ParseFloat(val.(string), 64)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn nil, fmt.Errorf(\"invalid data type, expected float, got %v\", reflect.TypeOf(val))\n\t\t\t\t\t}\n\t\t\t\t\tx[i] = float64val\n\t\t\t\t} else if _, ok := val.(float32); ok {\n\t\t\t\t\tx[i] = float64(val.(float32))\n\t\t\t\t} else if _, ok := val.(int); ok {\n\t\t\t\t\tx[i] = float64(val.(int))\n\t\t\t\t} else if _, ok := val.(int64); ok {\n\t\t\t\t\tx[i] = float64(val.(int64))\n\t\t\t\t} else if _, ok := val.(float64); !ok {\n\t\t\t\t\treturn nil, fmt.Errorf(\"invalid data type, expected float, got %v\", reflect.TypeOf(val))\n\t\t\t\t} else {\n\t\t\t\t\tx[i] = val.(float64)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn x, nil\n\t\tcase float32, float64:\n\t\t\treturn x, nil\n\t\tcase string:","sourceCodeStart":102,"sourceCodeEnd":138,"githubUrl":"https://github.com/SigNoz/signoz/blob/5069bf80b08f1f00d7e014eccc09902f9871004f/pkg/query-service/utils/format.go#L102-L138","documentation":"For a Float64 attribute key, an element inside a []interface{} value failed strconv.ParseFloat when it was a string, or fell through the float32/int/int64/float64 cases (reported at line 120 for the string-parse failure inside the array loop).","triggerScenarios":"Filter item with dataType AttributeKeyDataTypeFloat64 whose value array contains a non-parsable string like \"high\", \"1,5\", or \"\".","commonSituations":"Free-text input into a float filter in the UI; locale-formatted decimals (comma separator); empty strings from form defaults.","solutions":["Validate each array element parses as a base-10 float before sending","Normalize locale decimal separators and trim whitespace","Use JSON numbers instead of strings for float filter values"],"exampleFix":"// before\nvalue := []interface{}{\"1,5\"}\n// after\nvalue := []interface{}{1.5}","handlingStrategy":"validation","validationCode":"for _, e := range arr {\n\tif s, ok := e.(string); ok {\n\t\tif _, err := strconv.ParseFloat(strings.TrimSpace(s), 64); err != nil { return badRequest(\"invalid float %q\", s) }\n\t}\n}","typeGuard":"func isFloatArr(v interface{}) bool {\n\tarr, ok := v.([]interface{}); if !ok { return false }\n\tfor _, e := range arr {\n\t\tswitch e.(type) { case float32, float64, int, int64: continue; case string: if _, err := strconv.ParseFloat(e.(string), 64); err != nil { return false } ; default: return false }\n\t}\n\treturn true\n}","tryCatchPattern":"if _, err := utils.ValidateAndCastValue(v, v3.AttributeKeyDataTypeFloat64); err != nil { return 400 }","preventionTips":["Send JSON numbers for float filters","Normalize locale-specific decimal separators before submission"],"tags":["signoz","parsefloat","validation","go"],"backgroundTag":"numeric-string-parse-failed","analyzedSha":"5069bf80b08f1f00d7e014eccc09902f9871004f","analyzedAt":"2026-08-28T06:22:12.824Z","schemaVersion":2},"datasetVersion":"2026-08-28T11:17:15.048Z"}