如何检查值是否为浮点数

时间:2018-07-11 16:26:28

标签: go types

我想检查传递的值是否为浮点数。我有一段代码检查它是某个字符串还是浮点数。如果两者都不是,则给出一个错误。这是代码:

if sensorData.Passport.Geolocation.Latitude != "gps" && sensorData.Passport.Geolocation.Latitude != "internet" && sensorData.Passport.Geolocation.Latitude != "unknown" && sensorData.Passport.Geolocation.Latitude != //a float nmber{
            fmt.Println("Incorrect option")
        }

如何检查数据是否为浮点数?

1 个答案:

答案 0 :(得分:3)

  

Package strconv

import "strconv" 
     

func ParseFloat

func ParseFloat(s string, bitSize int) (float64, error)
     

ParseFloat使用以下命令将字符串s转换为浮点数:   由bitSize指定的精度:float32为32或float64为64。   当bitSize = 32时,结果仍为float64类型,但它将为   可转换为float32,而无需更改其值。

     

如果s格式正确且在有效的浮点数附近,则ParseFloat   返回使用IEEE754取整的最近的浮点数   无偏四舍五入。

     

ParseFloat返回的错误的具体类型为* NumError和   包括err.Num = s。

     

如果s在语法上不正确,则ParseFloat返回err.Err =   错误语法。

     

如果s的语法格式正确,但距离sULP大于1/2 ULP   给定大小的最大浮点数ParseFloat   返回f =±Inf,err.Err = ErrRange。


检查来自strconv.ParseFloat的错误,并检查空白string

例如,

package main

import (
    "fmt"
    "strconv"
)

func main() {
    for _, latitude := range []string{"40.7128", "gps", "neither", ""} {
        fmt.Printf("Latitude: %q\n", latitude)
        if latitude != "gps" {
            if _, err := strconv.ParseFloat(latitude, 10); err != nil || latitude == "" {
                fmt.Printf("Incorrect option: %q\n", latitude)
            }
        }
    }
}

游乐场:https://play.golang.org/p/4dNsMgRunFp

输出:

Latitude: "40.7128"
Latitude: "gps"
Latitude: "neither"
Incorrect option: "neither"
Latitude: ""
Incorrect option: ""