Ruby中浮点的一致舍入

bry*_*sai 2 ruby floating-point rounding

我理解由于浮点的不精确表示,下面的代码'感觉'不一致.

"%.1f" % 1.14 # => 1.1
"%.1f" % 1.15 # => 1.1
"%.1f" % 1.16 # => 1.2
"%.0f" % 1.4 # => 1
"%.0f" % 1.5 # => 2
"%.0f" % 1.6 # => 2
Run Code Online (Sandbox Code Playgroud)

但是,有一种简单的方法可以将一致的浮点数舍入为5吗?一种方法可能是明确地进行字符串操作.是否有更简单的方法或现有的图书馆?

Tob*_*hen 5

如果需要小数精度,请使用BigDecimal而不是浮点数.

编辑:在传递数字之前%,您必须手动将数字舍入到所需的长度,否则在舍入之前它将转换为正常的浮点数.

"%.1f" % BigDecimal('1.15').round(1) => "1.2"
"%.0f" % BigDecimal('1.5').round(0) => "2"
Run Code Online (Sandbox Code Playgroud)