2017-08-24 51 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