【问题标题】:Automatic unit conversion?自动单位转换?
【发布时间】:2013-02-25 13:05:55
【问题描述】:

是否有可用的包进行自动单位转换? 搜索用于显示目的的最佳单位的东西。

例如,当我有数字 0.000001m 时,它输出 1 µm?
或 0.000000001m 至 1 nm

【问题讨论】:

  • 嗯,为什么0.000001 应该变成1 µm,而不是1 µg?你认为图书馆应该如何判断你知道米?
  • 好了,应该可以告诉源单元了

标签: ruby unit-conversion


【解决方案1】:

虽然我不确定,但也许这会有所帮助

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

【讨论】:

  • 是的,我也找到了这个,但是好像不能自动进行单位转换。
【解决方案2】:

让我们看看使用简单的递归方法可以实现什么。

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]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 2014-12-27
    • 2010-09-26
    • 1970-01-01
    • 2010-11-27
    • 2013-09-04
    相关资源
    最近更新 更多