dot*_*tty 25 ruby floating-point rounding
我得到的数字就像
2.36363636363636
4.567563
1.234566465448465
10.5857447736
Run Code Online (Sandbox Code Playgroud)
我如何让Ruby将这些数字向上(或向下)舍入到最接近的0.05?
sep*_*p2k 21
[2.36363636363636, 4.567563, 1.23456646544846, 10.5857447736].map do |x|
(x*20).round / 20.0
end
#=> [2.35, 4.55, 1.25, 10.6]
Run Code Online (Sandbox Code Playgroud)
Dam*_*ian 20
检查这个链接,我认为这是你需要的. Ruby舍入
class Float
def round_to(x)
(self * 10**x).round.to_f / 10**x
end
def ceil_to(x)
(self * 10**x).ceil.to_f / 10**x
end
def floor_to(x)
(self * 10**x).floor.to_f / 10**x
end
end
Run Code Online (Sandbox Code Playgroud)
Bom*_*mbe 18
通常,"舍入到最接近的x " 的算法是:
round(x / precision)) * precision
Run Code Online (Sandbox Code Playgroud)
有时候乘以更好是1 / precision因为它是一个整数(因此它的工作速度更快):
round(x * (1 / precision)) / (1 / precision)
Run Code Online (Sandbox Code Playgroud)
在你的情况下,将是:
round(x * (1 / 0.05)) / (1 / 0.05)
Run Code Online (Sandbox Code Playgroud)
将评估为:
round(x * 20) / 20;
Run Code Online (Sandbox Code Playgroud)
我不知道任何Python,所以语法可能不正确,但我相信你可以搞清楚.
bou*_*uby 11
不太精确,但这种方法是大多数人用Google搜索此页面的方法
(5.65235534).round(2)
#=> 5.65
Run Code Online (Sandbox Code Playgroud)
这是一个以任何给定步长值舍入的通用函数:
在lib中放置:
lib/rounding.rb
class Numeric
# round a given number to the nearest step
def round_by(increment)
(self / increment).round * increment
end
end
Run Code Online (Sandbox Code Playgroud)
和规格:
require 'rounding'
describe 'nearest increment by 0.5' do
{0=>0.0,0.5=>0.5,0.60=>0.5,0.75=>1.0, 1.0=>1.0, 1.25=>1.5, 1.5=>1.5}.each_pair do |val, rounded_val|
it "#{val}.round_by(0.5) ==#{rounded_val}" do val.round_by(0.5).should == rounded_val end
end
end
Run Code Online (Sandbox Code Playgroud)
和用法:
require 'rounding'
2.36363636363636.round_by(0.05)
Run Code Online (Sandbox Code Playgroud)
心连心.
Ruby 2 现在有一个 round 函数:
# Ruby 2.3
(2.5).round
3
# Ruby 2.4
(2.5).round
2
Run Code Online (Sandbox Code Playgroud)
ruby 中还有一些选项,2.4例如::even、:up和:down
例如;
(4.5).round(half: :up)
5
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27605 次 |
| 最近记录: |