草庐IT

go - fmt.Println 不打印整个 float

coder 2024-07-11 原文

我正在尝试编写一个程序来计算 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

如何使整个值出现?

如果它有助于回答问题:我使用的公式是 Gregory-Leibniz 公式

最佳答案

func Sprint

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

Sprint formats using the default formats for its operands and returns the resulting string. Spaces are added between operands when neither is a string.


fmt.Sprint 返回一个 string。不要扔掉它;打印出来。

例如,

func main() {
    s := fmt.Sprint(gregorypi())
    fmt.Println(s)
}

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

输出:

3.1415926435897683

如果您想要比 IEEE 754 64 位 float 更精确的结果,请使用 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

关于go - fmt.Println 不打印整个 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53886960/

有关go - fmt.Println 不打印整个 float的更多相关文章

  1. ruby-on-rails - 在 Rails 中需要整个目录树的好方法是什么? - 2

    我正在使用Rails3.2.2并希望递归加载某个目录中的所有代码。例如:[Railsroot]/lib/my_lib/my_lib.rb[Railsroot]/lib/my_lib/subdir/support_file_00.rb[Railsroot]/lib/my_lib/subdir/support_file_01.rb...基于谷歌搜索,我试过:config.autoload_paths+=["#{Rails.root.to_s}/lib/my_lib/**"]config.autoload_paths+=["#{Rails.root.to_s}/lib/my_lib/**/"

  2. ruby-on-rails - 32651 :ERROR comparison of Float with Float failed ruby - 2

    我是Rails的新手,我遇到了一个错误,但我似乎找不到问题所在。这是日志:[32651:ERROR]2012-10-0913:46:52::comparisonofFloatwithFloatfailed[32651:ERROR]2012-10-0913:46:52::/home/sunny/backend/lib/analytics/lifetime.rb:45:in`each'/home/sunny/backend/lib/analytics/lifetime.rb:45:in`max'/home/sunny/backend/lib/analytics/lifetime.rb:45

  3. ruby - 为什么在 Ruby 中是 Float::INFINITY == Float::INFINITY? - 2

    在数学中,2个无穷大既不等于,也不大于或小于then。那么是什么给了?在irb中,Float::INFINITY==Float::INFINITY(在ruby​​1.9.3中测试) 最佳答案 用更专业的术语来说,这一切都归结为浮点运算的IEEE754标准。TheIEEE754standarddoesimplicitlydefineInfinity==Infinitytobetrue.Therelevantpartofthestandardissection5.7:"Fourmutuallyexclusiverelationsarep

  4. ruby - 强制 Ruby 不以标准形式/科学记数法/指数记数法输出 float - 2

    我遇到了同样的问题here对于python,但对于ruby​​。我需要输出这样一个小数字:0.00001,而不是1e-5。有关我的特定问题的更多信息,我正在使用f.write("Mynumber:"+small_number.to_s+"\n")输出到一个文件对于我的问题,准确性不是什么大问题,所以只做一个if语句来检查是否small_number那么更通用的方法是什么? 最佳答案 f.printf"Mynumber:%.5f\n",small_number您可以将.5(小数点右侧5位数字)替换为您喜欢的任何特定格式大小,例如,%8

  5. ruby-on-rails - Textmate 'Go to symbol' 相当于 Vim - 2

    在Railcasts上,我注意到一个非常有趣的功能“转到符号”窗口。它像Command-T一样工作,但显示当前文件中可用的类和方法。如何在vim中获取它? 最佳答案 尝试:helptags有各种程序和脚本可以生成标记文件。此外,标记文件格式非常简单,因此很容易将sed(1)或类似的脚本组合在一起,无论您使用何种语言,它们都可以生成标记文件。轻松获取标记文件(除了下载生成器之外)的关键在于格式化样式而不是实际解析语法。 关于ruby-on-rails-Textmate'Gotosymbol

  6. ruby - 使用 Ruby 将输入值适本地转换为整数或 float - 2

    我相信我对这个问题有一个很好的答案,但我想确保ruby​​-philes没有更好的方法来做到这一点。基本上,给定一个输入字符串,我想在适当的情况下将该字符串转换为整数,或在适当的情况下将其转换为float。否则,只返回字符串。我会在下面发布我的答案,但我想知道是否有更好的方法。例如:to_f_or_i_or_s("0523.49")#=>523.49to_f_or_i_or_s("0000029")#=>29to_f_or_i_or_s("kittens")#=>"kittens" 最佳答案 我会尽可能避免在Ruby中使用正则表达式

  7. ruby - 比较 rspec 中的 float 时的奇怪行为 - 2

    以下测试中的第3个失败:specify{(0.6*2).shouldeql(1.2)}specify{(0.3*3).shouldeql(0.3*3)}specify{(0.3*3).shouldeql(0.9)}#thisonefails这是为什么呢?这是浮点问题还是ruby​​或rspec问题? 最佳答案 从rspec-2.1开始specify{(0.6*2).shouldbe_within(0.01).of(1.2)}在那之前:specify{(0.6*2).shouldbe_close(1.2,0.01)}

  8. ruby - 猴子修补 float 中缀运算符产生意想不到的结果 - 2

    重新定义Float#/似乎没有效果:classFloatdef/(other)"magic!"endendputs10.0/2.0#=>5.0但是当另一个中缀运算符Float#*被重新定义时,Float#/突然采用了新的定义:classFloatdef/(other)"magic!"enddef*(other)"spooky"endendputs10.0/2.0#=>"magic!"我很想知道是否有人可以解释这种行为的来源,以及其他人是否得到相同的结果。ruby:ruby2.0.0p353(2013-11-22)[x64-mingw32]要快速确认错误,请运行thisscript.

  9. ruby - 如何检查一个值是否是 Integer()、Float() 或 Rational() 的有效输入? - 2

    这大致基于“HowtoconvertaStringtoIntegerorFloat”。如果我想使用Ruby的内置转换机制将数字字符串输入转换为其“最合适的类型”,我可以这样做:defconvert(input)value=Integer(input)rescuenilvalue||=Float(input)rescuenilvalue||=Rational(input)rescuenilvalueendconvert('1')#=>1convert('1_000')#=>1000convert('0xff')#=>255convert('0.5')#=>0.5convert('1e2'

  10. ruby - 如何强制 Float 在不使用科学记数法的情况下以完全精确的方式显示,而不是作为字符串显示? - 2

    在Ruby中,如何在没有科学记数法的情况下强制显示所有重要位置/完全精确的float?目前我将BigDecimal转换为Float,BigDecimal(0.000000001453).to_f,但这会产生1.453e-09的结果float。如果我执行类似"%14.12f"%BigDecimal("0.000000001453").to_f的操作,我会得到一个字符串。然而,在这种情况下,字符串作为输出是NotAcceptable,因为我需要它作为没有科学记数法的实际数字float。---编辑---好吧,让我在这里提供一些背景信息,这可能需要更改我原来的问题。我正在尝试使用Highsto

随机推荐