自動単位変換を行うパッケージはありますか? 表示目的に最適な単位を検索するもの。
たとえば、数値が 0.000001m の場合、1 µm を出力しますか?
または0.000000001m~1nm
自動単位変換を行うパッケージはありますか? 表示目的に最適な単位を検索するもの。
たとえば、数値が 0.000001m の場合、1 µm を出力しますか?
または0.000000001m~1nm
確かではありませんが、これが役立つかもしれません
単純な再帰的アプローチで何が達成できるか見てみましょう。
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]]