Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

(tye)Re3: The Definitive Unit Conversion Script

by tye (Sage)
on Dec 13, 2002 at 20:20 UTC ( #219739=note: print w/replies, xml ) Need Help??


in reply to Re^3: The Definitive Unit Conversion Script
in thread The Definitive Unit Conversion Script

This doesn't have to be complicated. Split on * and before /, then check for /\^\d+$/:

my @units= split m#(?<=.)(?:(?=/)|\*)#, $units, -1; my %power; for my $unit ( @units ) { my $power= 1; if( $unit =~ s#\^(\d+)$## ) { $power= $1; } if( $unit =~ s#^/## ) { $power= -$power; } $power{$unit} += $power; } # ...
then you have to find units that you can convert to with matching powers. So, if you start with kg/cm/sec [ which becomes (kg=>1,cm=>-1,sec=>-1) ] and are asked to return lb/ft/hr (lb=>1,ft=>-1,hr=>-1), then you have to convert from kg to lb, then convert cm to either ft or hr (there will be no cm-to-hr path so you'll do cm-to-ft), then convert the left-overs, sec-to-hr. And you're done.

(Updated and tested.)

        - tye

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://219739]
help
Chatterbox?
[ambrus]: Corion: which coordinate system is the upside down one?
[Corion]: ambrus: "the other" ;) To me, "normal" for GUIs means (0,0) is left-upper corner of the monitor/window. But for Prima, the lower-left corner it is ;)
[Corion]: Which would be OK for mathematics and paper, for me ;)
[ambrus]: Ok, so Prima has a postscript-like coordinate system

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (8)
As of 2016-12-09 10:43 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    On a regular basis, I'm most likely to spy upon:













    Results (150 votes). Check out past polls.