如何在Ruby中将整数舍入到<最接近的大数>?

Joh*_*ohn 9 ruby rounding significant-digits

说我有以下任何一个数字:

230957或83487或4785

在Ruby中有什么方法我可以分别返回300000或90000或5000?

mik*_*kej 5

def round_up(number)
  divisor = 10**Math.log10(number).floor
  i = number / divisor
  remainder = number % divisor
  if remainder == 0
    i * divisor
  else
    (i + 1) * divisor
  end
end
Run Code Online (Sandbox Code Playgroud)

用你的例子:

irb(main):022:0> round_up(4785)
=> 5000    
irb(main):023:0> round_up(83487)
=> 90000
irb(main):024:0> round_up(230957)
=> 300000
Run Code Online (Sandbox Code Playgroud)


mrm*_*mrm 5

def round_to_significant_digit(i, significant_digits = 1)
  exp = Math.log10(i).floor - (significant_digits - 1)
  (i / 10.0 ** exp).round * 10 ** exp
end

 >> [230957, 83487, 4785].collect{|i|round_to_significant_digit(i)}
 => [200000, 80000, 5000]
Run Code Online (Sandbox Code Playgroud)

额外的功劳:

 >>  [230957, 83487, 4785].collect{|i|round_to_significant_digit(i, 2)}
 => [230000, 83000, 4800]
 >>  [230957, 83487, 4785].collect{|i|round_to_significant_digit(i, 3)}
 => [231000, 83500, 4790]
Run Code Online (Sandbox Code Playgroud)