将具有特定小数位的数字保存到变量

时间:2014-10-05 16:55:10

标签: ruby decimal

我知道在ruby中你可以使用printf格式化一个要打印一定数量的小数位数的数字,即。 1.2 - > 1.20,等等。我想知道的是如何将一个带有某些小数位的数字分配给变量以便以后使用。我需要在计算中使用更精确的数字,并且无法找到解释如何操作的任何地方。我看过这个答案here,但它看起来像是特定版本的rails,而我只使用Ruby。我试过用number_to_precision稍微玩一下但对Ruby很新,但仍然不了解如何实现它。是否有可能做到这一点?

2 个答案:

答案 0 :(得分:2)

方法number_with_precision是仅用于视图的辅助方法,它返回数字的字符串版本。它不会返回具有指定精度的数字,如果这是您正在寻找的数字。好消息是,如果你想要number_with_precision给你的确切内容,你可以使用sprintf

sprintf('%.2f', 3.1415926)    # result: "3.14"

sprintf会返回您可以存储的值,而不是像printf那样打印到stdout。所以你可以轻松捕获它:

number = sprintf('%.2f', 3.1415926)

如果您想将其视为数字,您可以构建一个为您执行此操作的类,并根据需要转换为Float和从Float转换。

答案 1 :(得分:1)

要在Ruby中获取任意浮点精度数,可以使用BigDecimal个对象来执行计算。

此类保证您的计算将在点之后使用尽可能多的数字,并且不会因将基数10转换为基数2而导致的舍入误差而受到影响。