如何始终将 Ruby 中的数字四舍五入?
How do I always round a number down in Ruby?
例如,如果我希望 987 等于“900”。
n = 987
m = 2
n.floor(-m)
#=> 900
参见Integer#floor:"When the precision is negative, the returned value is an integer with at least ndigits.abs
trailing zeros."
或
(n / 10**m) * 10**m
#=> 900
您可以使用对数来计算除以的最佳倍数。
def round_down(n)
log = Math::log10(n)
multip = 10 ** log.to_i
return (n / multip).to_i * multip
end
[4, 9, 19, 59, 101, 201, 1500, 102000].each { |x|
rounded = round_down(x)
puts "#{x} -> #{rounded}"
}
结果:
4 -> 4
9 -> 9
19 -> 10
59 -> 50
101 -> 100
201 -> 200
1500 -> 1000
102000 -> 100000
当您需要计算图表的偶数刻度间距时,这个技巧非常有用。
例如,如果我希望 987 等于“900”。
n = 987
m = 2
n.floor(-m)
#=> 900
参见Integer#floor:"When the precision is negative, the returned value is an integer with at least ndigits.abs
trailing zeros."
或
(n / 10**m) * 10**m
#=> 900
您可以使用对数来计算除以的最佳倍数。
def round_down(n)
log = Math::log10(n)
multip = 10 ** log.to_i
return (n / multip).to_i * multip
end
[4, 9, 19, 59, 101, 201, 1500, 102000].each { |x|
rounded = round_down(x)
puts "#{x} -> #{rounded}"
}
结果:
4 -> 4
9 -> 9
19 -> 10
59 -> 50
101 -> 100
201 -> 200
1500 -> 1000
102000 -> 100000
当您需要计算图表的偶数刻度间距时,这个技巧非常有用。