代码之家  ›  专栏  ›  技术社区  ›  Joseph Weissman

在Ruby中转换物理单位(千克、磅)的库?

  •  9
  • Joseph Weissman  · 技术社区  · 14 年前

    我知道Rails有一些很好的日期和时间管理助手。是否已经有一个工作项目,包括或合并一个标准单位及其转换的干净DSL?任何有助于在两个系统的长度和重量基本单位之间转换的项目都可以工作。谢谢您!

    6 回复  |  直到 9 年前
        1
  •  20
  •   Community Neeleshkumar S    7 年前

    哇,这些比我想象的要多得多。以下是我认为是一个完整的列表,按字母顺序排列,示例用法从文档中删除。我还注意到如果我不能让他们在本地运行。

    1. Alchemist

      require 'alchemist'
      Alchemist.setup
      8.miles.to.meters
      10.kilometers + 1.mile # 11.609344 kilometers
      
    2. measurement

      这个似乎过时了,最后一次提交是5年前,对我来说,它似乎没有在1.9.3上运行。

      include Measurement::Length
      Inch.new(12).to_centimeters # => #<Measurement::Length::Centimeter:0x173c2b4 @units=30.48>
      
    3. Phys-Units

      require "phys/units"
      Q = Phys::Quantity
      U = Phys::Unit
      
      Q[1.23,'km'] + Q[4.56,'m']    #=> Phys::Quantity[1.23456,'km']
      Q[123,'mile'] / Q[2,'hr']     #=> Phys::Quantity[61,'mile/hr']
      Q[61,'miles/hr'].want('m/s')  #=> Phys::Quantity[27.26944,'m/s']
      Q[1.0,'are'] == Q[10,'m']**2  #=> true
      
    4. Quantity

      请注意,这一条声明它在自述文件中还没有准备好生产。

      require 'quantity/all'
      1.meter                                         #=> 1 meter
      1.meter.to_feet                                 #=> 3.28083... foot
      c = 299792458.meters / 1.second                 #=> 299792458 meter/second
      
      newton = 1.meter * 1.kilogram / 1.second**2     #=> 1 meter*kilogram/second^2
      newton.to_feet                                  #=> 3.28083989501312 foot*kilogram/second^2
      newton.convert(:feet)                                   #=> 3.28083989501312 foot*kilogram/second^2
      jerk_newton = newton / 1.second                         #=> 1 meter*kilogram/second^3
      jerk_newton * 1.second == newton                        #=> true
      
    5. SY

      Boris Stitnickey's answer

    6. ruby-measurement

      require 'ruby-measurement'
      
      measurement = Measurement.parse('3 feet')  # => 3.0 ft.
      measurement.convert_to(:yards)             # => 1.0 yd.
      measurement.convert_to(:in)                # => 36.0 in.
      measurement.convert_to(:inches)            # => 36.0 in.
      
      measurement1 = Measurement.parse('3 feet') # => 3.0 ft.
      measurement2 = Measurement.parse('6 inch') # => 6.0 in.
      measurement1 + measurement2                # => 3.5 ft.
      
    7. ruby-units

      require 'ruby-units'
      
      unit = Unit("mm")                # unit only (defaults to a scalar of 1)
      unit = Unit("1 mm")              # create a simple unit
      unit = Unit("1 kg*m^2/s^2")      # complex unit
      
      unit1 =~ unit2                   # true if units are compatible
      unit1.compatible?(unit2)         # true if units are compatible
      
      unit1 = unit >> "ft"             # convert to 'feet'
      unit3 = unit1 + unit2            # resulting object will have the units of unit1
      
      unit1 === unit2                  # true if units and quantity are the same, even if 'equivalent' by <=>
      unit.convert_to('ft')            # convert
      (unit1 + unit2).convert_to('ft') # converts result to 'ft'
      
    8. Units for Ruby

      require 'units'
      
      three_meters = 3.meters
      two_meters = 2.m
      one_inch = 1.inch
      
      3.meters.to_inches # => 118.1103 inch
      10.inches.to_mm    # => 254.0 millimeter
      
    9. Unitwise

      require 'unitwise/ext'
      
      1.yard == (1.foot * 3)                       # => true
      
      1.quart < 1.liter                            # => true
      
      2.meter + 3.inch - 1.yard                    # => <Unitwise::Measurement 1.1618 meter>
      
      1.convert_to('kg.m2/s2') == 1.joule          # => true
      
      (20.kg * 9.8.convert_to('m/s2')).to_pound_force # => <Unitwise::Measurement 44.06255284754326 pound_force>
      
      (300.horsepower * 60.second).to_calorie      # => <Unitwise::Measurement 3208077.8414151203 calorie>
      
    10. Van/Unit

      像另一张海报一样,我很难把它做好。但是,你可以看到 Jörg W Mittag's answer 供使用。

    作为的作者 整体的 很明显这是我最喜欢的。不过,我鼓励你至少去看看。

        2
  •  6
  •   Andy Waite    9 年前

    尝试太棒了 Alchemist .

    ……

        3
  •  1
  •   Jörg W Mittag    14 年前

    看看汤姆·索耶的 Van/Unit

    这是主页上的:

    require 'van/units'
    include Units
    
    1.mile.to(feet)
    1.acre.to(yd**2)
    1.acre.to(sq_yd)
    1.gallon.to(self.L)
    1.lb.to(kg)
    1.m.s.to(m.s)
    1.sq_mi.to(km**2)
    1.mile.to(km)
    1.usd.to(twd)
    1.bit/s + 8.bytes/s
    
        4
  •  1
  •   Boris Stitnicky    11 年前

    尝试 gem install sy

    require 'sy'
    
    ( 5.g *                # a bullet of 5g
        500.m.s(-1) ** 2 / # flying at a speed of 500m/s has kJ energy:
    2 ).in( :kJ )          #=> 0.625
    
    require 'sy/imperial'    
    
    1.mile.in :ft   #=> 5280.0
    1.acre.in :yd²  #=> 4840.0
    1.gallon.in :l  #=> 4.54609
    1.lb.in :kg     #=> 0.45359237
    1.mile².in :km² #=> 2.589988110336
    SY::SPEED_OF_LIGHT.in "furlong.fortnight⁻¹" #=> 1802617499785.2544
    
        5
  •  0
  •   esilver rmaddy    14 年前

    我无法让货车/单位工作-所有的IT报告是:

    /library/ruby/gems/1.8/gems/van units-1.5.0/lib/van/units/base.rb:493:in `至:不兼容的操作单元 (类型错误) 来自Unitstest.rb:4

    运行时

    require 'rubygems' 
    require 'van/units' 
    include Van::Units puts
    1.meter.to(feet)
    

    我花了一个小时试图破解货车/单元的来源,但没有成功。

    它所基于的旧宝石是现成的:

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

        6
  •  0
  •   Philipp Bolliger    13 年前

    货车似乎坏了。我建议试试

    rubynits(http://ruby-units.rubyforge.org/ruby-units/)

    测量(https://github.com/collectiveidea/measurement)