dongshi1934
2018-02-16 13:42
浏览 41
已采纳

如何在旅途中很好地显示浮点数

I want to be able to display very large floating point numbers created with math/big.

  • if there are no decimals, no .000 should be added
  • only add the necessary number of decimals (display 1.1234 not 1.123400)
  • great precision (tens of exact decimals)

https://play.golang.org/p/CulS5wXxzGq

coef := new(big.Float).SetPrec(4096)
coef.SetString("1000000000000000")
a := new(big.Float).SetPrec(4096)
a.SetString("1")
a.Quo(a, coef)
fmt.Printf("%.100g
", a)
// 1e-15
// was expecting: 0.000000000000001

b := new(big.Float).SetPrec(4096)
b.SetString("1234.00")
fmt.Printf("%.100g
", b)
// 1234.00
// looks good

c := new(big.Float).SetPrec(4096)
c.SetString("1234.001000")
fmt.Printf("%.100g
", c)
// 1234.001000
// looks good

图片转代码服务由CSDN问答提供 功能建议

我希望能够显示使用数学/大

  • 如果没有小数,则不应该添加 .000
  • 仅添加必要数量的 小数点(显示 1.1234 而不是 1.123400
  • 精确度高(精确到十进制的小数)

    https://play.golang.org/p/CulS5wXxzGq

      coef:= new(big.Float).SetPrec(4096)
    coef.SetString(“ 1000000000000000”)
    a:= new(big.Float).SetPrec(4096)  
    a.SetString(“ 1”)
    a.Quo(a,coef)
    fmt.Printf(“%。100g 
    ”,a)
     // 1e-15 
     //预期:0.000000000000001 
      
    b:= new(big.Float).SetPrec(4096)
    b.SetString(“ 1234.00”)
    fmt.Printf(“%。100g 
    ”,b)
     // 1234.00 
     //看起来不错 
     
    c:= new(big.Float).SetPrec(4096)
    c.SetString(“ 1234.001000”)
    fmt.Printf(“%。100g 
    ”,c)
     // 1234.001000 
     // 看起来不错
       
     
  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dongtang1910 2018-02-16 14:06
    已采纳

    There is a Text() method for big.Float that I think does what you want. If passed a negative precision, it will use as many digits as necessary to represent the value, but no more. Try:

    func format(x *big.Float) string {
        return x.Text('f', -1)
    }
    

    That will give you:

    0.000000000000001
    1234
    1234.001
    
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题