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

如何在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
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率