代码之家  ›  专栏  ›  技术社区  ›  user1870400

如何在Golang中将float64转换为c99十六进制字符串?

go
  •  -1
  • user1870400  · 技术社区  · 6 年前

    如何在Golang中将float64转换为十六进制字符串(遵循C99标准)?

    -561.2863 -0x1.18a4a57a786c2p9

    1 回复  |  直到 6 年前
        1
  •  1
  •   peterSO    6 年前

    例如,

    package main
    
    import (
        "fmt"
        "math/big"
    )
    
    func main() {
        f := new(big.Float).SetFloat64(-561.2863)
        fmt.Println(f)
        t := f.Text('p', 0)
        fmt.Println(t)
        g, ok := new(big.Float).SetString(t)
        if !ok {
            fmt.Println("error")
        }
        fmt.Println(g)
        c, ok := new(big.Float).SetString("-0x1.18a4a57a786c2p9")
        if !ok {
            fmt.Println("error")
        }
        fmt.Println(c)
    }
    

    游乐场: https://play.golang.org/p/9BygKkJcNbm

    输出:

    -561.2863
    -0x.8c5252bd3c361p+10
    -561.2862999999999829
    -561.2862999999999829
    

    或者,简单地说,

    package main
    
    import (
        "fmt"
        "math/big"
    )
    
    func main() {
        f64 := -561.2863
        fmt.Println(f64)
        s := new(big.Float).SetFloat64(f64).Text('p', 0)
        fmt.Println(s)
    }
    

    游乐场: https://play.golang.org/p/MR2AxtlBcqv

    输出:

    -561.2863
    -0x.8c5252bd3c361p+10
    

    在C,

    #include <stdio.h>
    
    int main() {
        double f = -561.2863;
        printf("%f %a\n", f, f);
    }
    

    输出:

    -561.286300 -0x1.18a4a57a786c2p+9