2013-02-25 48 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]]