Библиотеки для перевода физических единиц (килограммы, фунты) в руби? - PullRequest
9 голосов
/ 21 ноября 2010

Я знаю, что в Rails есть несколько хороших помощников для управления датой и временем. Есть ли уже работающий проект, состоящий или включающий чистый DSL для стандартных модулей и их преобразований? Любой проект с помощниками для преобразования между основными единицами длины и веса двух систем будет работать. Спасибо!

Ответы [ 6 ]

20 голосов
/ 15 февраля 2014

Ух ты, их гораздо больше, чем я ожидал.Вот то, что я считаю полным списком в алфавитном порядке, с примером использования, взятым из их документации.Я также отметил, что не могу заставить их работать локально.

  1. Alchemist

    require 'alchemist'
    Alchemist.setup
    8.miles.to.meters
    10.kilometers + 1.mile # 11.609344 kilometers
    
  2. измерение

    Это выглядит устаревшим, последний коммит был 5 лет назад, и мне кажется, что он не работает на 1.9.3.

    include Measurement::Length
    Inch.new(12).to_centimeters # => #<Measurement::Length::Centimeter:0x173c2b4 @units=30.48>
    
  3. Физические единицы

    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. Количество

    Обратите внимание, что это утверждает, что этоне готов к производству в README.

    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

    См. Ответ Бориса Ститницкого .

  6. рубиновое измерение

    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. рубиновое число

    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. Единицы измерения для 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. Единица измерения

    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. Фургон / Юнит

    Как и у другого автора, у меня были проблемы с этим.Тем не менее, вы можете увидеть Jörg W Mittag для использования .

Как автор Unitwise , может быть очевидно, что это мой любимыйвне группы.Я призываю вас хотя бы проверить это.

6 голосов
/ 21 ноября 2010

Попробуйте классно Алхимик .

......

1 голос
/ 18 мая 2013

Попробуйте 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
1 голос
/ 21 ноября 2010

Взгляните на Тома Сойера Фургон / Юнит

Это с домашней страницы:

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
0 голосов
/ 17 февраля 2011

Ванунитс кажется сломанным. предлагаю попробовать

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

или

измерения (https://github.com/collectiveidea/measurement)

0 голосов
/ 15 января 2011

Мне не удалось заставить Ван / юнитов работать - все, что он сообщает:

/ Library / рубин / Gems / 1,8 / драгоценные камни / vanunits-1.5.0 / Библиотека / фургон / ЕД / base.rb: 493: в `to ': несовместимые блоки для работы (TypeError) from unittest.rb: 4

При работе

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

Я провел час безуспешно, пытаясь взломать источник фургона / юнитов.

Старый самоцвет, на котором он основан, работает из коробки:

http://ruby -units.rubyforge.org / рубин-единиц /

...