Joh*_*ohn 9 ruby rounding significant-digits
说我有以下任何一个数字:
230957或83487或4785
在Ruby中有什么方法我可以分别返回300000或90000或5000?
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)
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)
| 归档时间: |
|
| 查看次数: |
6368 次 |
| 最近记录: |