วิธีตรวจสอบว่าค่าเป็นแบบทศนิยม [ปิด]

ฉันต้องการตรวจสอบว่าค่าที่ฉันได้รับเป็นตัวเลขทศนิยมหรือไม่ ฉันมีโค้ดชิ้นหนึ่งที่ตรวจสอบว่าเป็นสตริงบางตัวหรือตัวเลขทศนิยม ถ้าไม่เช่นนั้นก็ให้ข้อผิดพลาด นี่คือรหัส:

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")
        }

ฉันจะตรวจสอบได้อย่างไรว่าข้อมูลเป็นตัวเลขทศนิยม?


person Melissa    schedule 11.07.2018    source แหล่งที่มา
comment
อาจซ้ำกันของ วิธีตรวจสอบประเภทตัวแปรที่รันไทม์ใน Go ภาษา   -  person Jacob Boertjes    schedule 11.07.2018


คำตอบ (1)


แพ็คเกจ strconv

import "strconv" 

func ParseFloat

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

ParseFloat แปลงสตริง s เป็นตัวเลขทศนิยมด้วยความแม่นยำที่ระบุโดย bitSize: 32 สำหรับ float32 หรือ 64 สำหรับ float64 เมื่อ bitSize=32 ผลลัพธ์ยังคงเป็นประเภท float64 แต่จะสามารถแปลงเป็น float32 ได้โดยไม่ต้องเปลี่ยนค่า

ถ้า s มีรูปแบบที่ดีและใกล้กับจำนวนจุดลอยตัวที่ถูกต้อง ParseFloat จะส่งกลับจำนวนจุดลอยตัวที่ใกล้ที่สุดที่ปัดเศษโดยใช้การปัดเศษที่ไม่เอนเอียง IEEE754

ข้อผิดพลาดที่ ParseFloat ส่งกลับมีประเภทที่เป็นรูปธรรม *NumError และรวม err.Num = s

ถ้า s ไม่ได้มีรูปแบบทางวากยสัมพันธ์ที่ดี ParseFloat จะส่งกลับ err.Err = ErrSyntax

ถ้า s มีรูปแบบทางวากยสัมพันธ์ที่ดี แต่อยู่ห่างจากจำนวนจุดลอยตัวที่ใหญ่ที่สุดของขนาดที่กำหนดมากกว่า 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: ""
person peterSO    schedule 11.07.2018