【问题标题】:How to get ruby to show more decimal places?如何让红宝石显示更多小数位?
【发布时间】:2015-12-08 00:53:09
【问题描述】:

我目前正在做一个欧拉问题,需要我找到重复小数的模式。但是,Ruby 舍入太快,我找不到将小数充实到第 n 位的方法。

例如:

1/7.to_f => 0.14285714285714285

但我正在努力做到这一点:

1/7.to_f => 0.14285714285714285714285714285757142857142857

任何帮助将不胜感激!

【问题讨论】:

    标签: ruby floating-point decimal


    【解决方案1】:

    所有语言都支持在输出中定义浮点精度。 Ruby 使用通用格式字符串:

    pi = 355.0/113.0
    '%1.5f' % pi # => "3.14159"
    

    或者,在你的情况下:

    '%1.20f' % (1.0/7.0) # => "0.14285714285714284921"
    '%1.20f' % (1.to_f/7) # => "0.14285714285714284921"
    '%1.20f' % (1/7.to_f) # => "0.14285714285714284921"
    

    我建议阅读 String 的 %Kernel::sprintf 的文档。 Ruby 如何确定使用固定或浮动数学以及to_f 的使用在任何体面的 Ruby 教程中都有介绍。

    【讨论】:

    • 这是一种误导,因为双精度数只有约 15 个有效(十进制)数字。显然'%1.30f' % (1.0/7.0) # => "0.142857142857142849212692681249" 不包含正确的模式
    • 你是对的,超过 15 是有问题的,但是我要说的是可以使用 sprintf 的格式化字符串来格式化数字。随意添加答案以解决提高精度的各种方法。
    【解决方案2】:

    通过将计算放大 10 次方,您可以轻松获得任意数量的重复数字

    10**100/7
    => 1428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-11
      • 1970-01-01
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-02
      相关资源
      最近更新 更多