2010-11-21 29 views
9

Tôi biết Rails có một số người giúp việc tốt để quản lý ngày và giờ. Có một dự án đã làm việc bao gồm hoặc kết hợp DSL sạch cho các đơn vị tiêu chuẩn và chuyển đổi của chúng không? Bất kỳ dự án nào có người trợ giúp cho việc chuyển đổi giữa các đơn vị cơ bản của chiều dài và trọng lượng của hai hệ thống sẽ hoạt động. Cảm ơn bạn!Thư viện để chuyển đổi đơn vị vật lý (kg, pound) trong Ruby?

Trả lời

18

Wow, có khá một vài chi tiết của những hơn tôi mong đợi. Dưới đây là những gì tôi tin là một danh sách đầy đủ, theo thứ tự bảng chữ cái, với việc sử dụng ví dụ bị tước khỏi tài liệu của họ. Tôi cũng lưu ý nếu tôi không thể chạy chúng tại địa phương.

  1. Alchemist

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

    một Điều này dường như đã lỗi thời, cam kết cuối cùng là 5 năm trước đây, và nó dường như không chạy trên 1.9.3 cho tôi .

    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

    Lưu ý rằng điều này khẳng định rằng nó không phải là sản xuất sẵn sàng trong 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

    Xem 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

    Giống như một poster, tôi gặp khó khăn khi làm việc này. Tuy nhiên, bạn có thể thấy Jörg W Mittag's answer để sử dụng.

Là tác giả của Unitwise, có thể hiển nhiên rằng đó là tác phẩm yêu thích của tôi trong nhóm. Tôi khuyến khích bạn ít nhất là kiểm tra xem nó ra, mặc dù.

6

Hãy thử tuyệt vời Alchemist.

......

+0

Cảm ơn và +1, trông cực kỳ đẹp. –

+0

Github là 404-ing. :( –

+2

Hãy thử http://github.com/halogenandtoast/alchemist – Psynix

1

Hãy xem Tom Sawyer của Van/Unit

Đây là từ trang chủ:

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

Tuyệt đẹp. Đây chính xác là những gì tôi đã hy vọng bí mật. Cảm ơn bạn! +1 và chấp nhận –

0

tôi đã không thể có được Van/đơn vị để làm việc - tất cả báo cáo là:

/Library/Ruby/Gems/1.8/gems/vanunits-1.5.0/lib/van/units/base.rb:493:in `để ': đơn vị không phù hợp cho hoạt động (TypeError) từ unitstest.rb: 4

Khi chạy

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

tôi đã dành một tiếng đồng hồ nhưng không thành công cố gắng để hack mã nguồn của van/đơn vị.

Các viên ngọc trai trên đó nó được dựa làm việc ra khỏi hộp:

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

0

vanunits dường như bị phá vỡ. tôi đề nghị thử

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

hoặc

đo (https://github.com/collectiveidea/measurement)

1

Hãy thử 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

Trong [sy] (https://github.com/boris -s/sy), tôi nhấn mạnh tính chính xác của mô hình kinh doanh và dễ sử dụng dễ dàng hơn việc thực hiện Thư viện đơn vị vật lý duy nhất khác ngoài _sy_, có mô hình đối tượng tôi thực sự thích, là [phys-units] (https: // github. com/masa16/phys-units) từ [tác giả của đá quý narray nổi tiếng] (https://github.com/masa16) –

+0

+ 1/chấp nhận điều này vì nó có vẻ hiện đại hơn nhiều so với các đề xuất trước đó. –

Các vấn đề liên quan