2013-02-25 52 views
1

有没有可以自动进行单位转换的软件包? 某些用于显示目的的最佳单位。自动单位换算?

例如,当我有数字0.000001m它输出1微米?
或者0.000000001米至1纳米

+1

嗯,为什么'0.000001'应该变成1微米,而不是'1微克?你认为图书馆应该知道你知道米吗? – mudasobwa 2013-02-25 14:24:07

+0

好吧,你应该可以告诉源单元 – madmax 2013-02-26 07:15:33

回答

1

让我们来看看,我们可以用一个简单的递归方法实现。

class Numeric 
    def choose_best_scale(prefix = nil) 
    if abs >= 1e2 
     (self/1e3).choose_best_scale next_prefix(prefix) 
    elsif abs <= 1e-2 
     (self * 1e3).choose_best_scale prev_prefix(prefix) 
    else 
     [self, prefix] 
    end 
    end 

    private 

    SIPrefixes = [:n, :μ, :m, :k, :M, :G] 

    def prev_prefix(prefix) 
    return :m if prefix.nil? 
    SIPrefixes[SIPrefixes.index(prefix) - 1] 
    end 

    def next_prefix(prefix) 
    return :k if prefix.nil? 
    SIPrefixes[SIPrefixes.index(prefix) + 1] 
    end 
end 

下面是它在实践中的工作原理。

pry(main)> (-6..6).map { |x| (10.0 ** x).choose_best_scale } 
=> [[1.0, :μ], 
    [10.0, :μ], 
    [0.1, :m], 
    [1.0, :m], 
    [10.0, :m], 
    [0.1, nil], 
    [1.0, nil], 
    [10.0, nil], 
    [0.1, :k], 
    [1.0, :k], 
    [10.0, :k], 
    [0.1, :M], 
    [1.0, :M]]