2017-08-24 48 views

回答

2

您可能在寻找Float#round,它有两个参数:一个十进制数字和half关键字指定的方向(向上舍入是默认值)。

1.23456789.round(6, half: :up) 
=> 1.234568 

在Ruby 2.4之前,您无法指定舍入方向 - 它总是舍入。 Heroku's "Ruby 2.4 Released: Faster Hashes, Unified Integers and Better Rounding"涵盖了一些更详细的变化。

BigDecimal可帮助您更准确地执行这些计算(即避免浮点算术错误)。同样,四舍五入为默认值,但可以明确指定:

big_decimal = BigDecimal("1.23456789") 
big_decimal.round(6, BigDecimal::ROUND_HALF_UP).to_f 
=> 1.234568 
+1

这里有一个问题:Java的BigDecimal的精确值,Ruby的浮动已经普遍知道的功能/精确度问题,内部for和字符之间的转换等... –

+3

@JacekCz Ruby的'BigDecimal'就像Java有'float'一样,每种语言都有浮点精度。旁注:上面的答案只适用于Ruby> = 2.4 – engineersmnky

+0

非常有效,谢谢!我已经编辑了答案,以包含这些点的例子。 – jpn