登录
首页 >  Golang >  Go问答

fmt.Println 不输出完整的浮点数

来源:stackoverflow

时间:2024-02-28 23:54:24 484浏览 收藏

大家好,今天本人给大家带来文章《fmt.Println 不输出完整的浮点数》,文中内容主要涉及到,如果你对Golang方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!

问题内容

我正在尝试编写一个程序来计算 pi 的值并将其打印在终端上,但只有部分内容显示在屏幕上

package main

import (
    "fmt"
)

func gregorypi() float64 {
    numerator := 1.0
    divisor := 3.0
    var result float64

    for i := 0; i <= 100000000; i++ {
            if i%2 == 0 {
                    result += numerator / divisor
                    divisor += 2
            } else {
                    result -= numerator / divisor
                    divisor += 2

            }

    }

    return (4 * (1 - result))

}

func main() {

    fmt.Sprint(gregorypi())

}

输出为:3.1415926435897683

如何才能显示整个值?

如果它有助于回答问题:我使用的公式是格雷戈里-莱布尼兹公式


解决方案


func Sprint

func sprint(a ...interface{}) string

sprint 格式使用其操作数和返回的默认格式 结果字符串。当两个操作数之间都没有空格时,在操作数之间添加空格 是一个字符串。

fmt.sprint 返回 string。不要把它扔掉;打印它。

例如,

func main() {
    s := fmt.sprint(gregorypi())
    fmt.println(s)
}

演示:https://play.golang.org/p/zOVtJc5HfXT

输出:

3.1415926435897683

如果您想要比 ieee 754 64 位浮点更精确的结果,请使用 go math/big 包。

例如,

package main

import (
    "fmt"
    "math/big"
)

func gregorypi(iter int, prec uint) *big.float {
    one := big.newfloat(1)
    two := big.newfloat(2)
    four := big.newfloat(4)
    numerator := big.newfloat(1).setprec(prec)
    divisor := big.newfloat(3).setprec(prec)
    result := new(big.float).setprec(prec)

    for i := 0; i <= iter; i++ {
        if i%2 == 0 {
            result.add(result, new(big.float).quo(numerator, divisor))
        } else {
            result.sub(result, new(big.float).quo(numerator, divisor))
        }
        divisor.add(divisor, two)
    }

    return new(big.float).mul(four, (new(big.float).sub(one, result)))

}

func main() {
    pi := gregorypi(1000000, 4096)

    s := fmt.sprint(pi)
    for i, j := 0, 0; i < len(s); i = j {
        j = i + 60
        if j > len(s) {
            j = len(s)
        }
        fmt.println(s[i:j])
    }
}

输出:

3.1415916535917932347126498832691903993221476025342620143148
652250543253683419302770934570540444696092784515646197918416
151531004207388567190381995115109764938931650751911723670828
705935671760975424757204401786734958287682330276123443546400
855990841037108771486255447137253791363986086026524209725177
041621398938122502069099548344075841960714856836014332632487
249750055949826053894250927777836988620276187954914335474236
918693730264540456485214156731536507281567237095178205850787
841887779856892311307656085287982909183503886914799719930651
362811646060939082163336282527001630768619465916054216662233
647867947277285894357821722722774052560440050583160360321106
944441543917458948854721791262992799982426130041196627951982
504267630916391384654303083557011574782570253034162966525670
594481466474403221843818413155653700689258246423537757630787
951957260253561222183715232613769610553278998905210089847178
951692922815021787390361813556619177840043555176857090268624
902791212304201317960964869615176784400855500998688041903616
187746299057333789390884081442894661717258714989758581139759
403617872623424695182488545758897457727485849932980050101014
208290473579625783313281627594640164541223264510142763045401
708614153731722941036904397534247

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《fmt.Println 不输出完整的浮点数》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>