1

自動単位変換を行うパッケージはありますか? 表示目的に最適な単位を検索するもの。

たとえば、数値が 0.000001m の場合、1 µm を出力しますか?
または0.000000001m~1nm

4

2 に答える 2

3

確かではありませんが、これが役立つかもしれません

http://ruby-units.rubyforge.org/ruby-units/

于 2013-02-25T13:09:57.300 に答える
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]]
于 2013-02-26T18:42:40.610 に答える