duanhe6718 2018-07-25 19:32
浏览 453
已采纳

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

How to convert float64 to hex string(that follows c99 standard) in Golang?

-561.2863 to -0x1.18a4a57a786c2p9

  • 写回答

1条回答 默认 最新

  • 普通网友 2018-07-25 20:19
    关注

    For example,

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

    Playground: https://play.golang.org/p/9BygKkJcNbm

    Output:

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

    Or, simply,

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

    Playground: https://play.golang.org/p/MR2AxtlBcqv

    Output:

    -561.2863
    -0x.8c5252bd3c361p+10
    

    In C,

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

    Output:

    -561.286300 -0x1.18a4a57a786c2p+9
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?