截断浮点数而不进行舍入

age*_*217 22 ruby math floating-point precision decimal

我有一个浮点数,我想截断到3个位置,但我不想舍入.

例如,转换1.01555555555555551.015(不1.016).

我将如何在Ruby中执行此操作?

Mar*_*ers 22

假设你有float,试试这个:

(x * 1000).floor / 1000.0
Run Code Online (Sandbox Code Playgroud)

结果:

1.015
Run Code Online (Sandbox Code Playgroud)

看到它在线工作:ideone


小智 22

您也可以转换为BigDecimal,并在其上调用truncate.

1.237.to_d.truncate(2).to_f # will return 1.23
Run Code Online (Sandbox Code Playgroud)

  • 它在`59.99999999999999999999.to_d.truncate(2).to_f`失败,返回'60.0` !! (2认同)

pot*_*hin 15

由于ruby 2.4 Float#truncate方法将可选参数作为一个小数位数:

1.0155555555555555.truncate(3)
# => 1.015
Run Code Online (Sandbox Code Playgroud)


Don*_*oby 7

乘以一千,一层,除以一千,确保做一个浮动分区.

(x * 1000).floor / 1000.0
Run Code Online (Sandbox Code Playgroud)

或者,在Ruby 1.9.2中,使用早期版本中未提供的回合版本,

(x - 0.0005).round(3)
Run Code Online (Sandbox Code Playgroud)