Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister

Re^3: The Definitive Unit Conversion Script

by Aristotle (Chancellor)
on Dec 13, 2002 at 19:37 UTC ( #219716=note: print w/replies, xml ) Need Help??

in reply to (tye)Re2: The Definitive Unit Conversion Script
in thread The Definitive Unit Conversion Script

"Definitive" in the sense that it effortlessly converts into all related units, not in the amount of units handled. :)

Of course it would be nice to add some limited parsing and intrinsic "understanding" of units and I can see how I'd go about implementing the basic idea (split into numerator and denominator, convert, divide), but how complex a unit specification should it be able to handle? I don't want to add so much weight that it turns into a small expression evaluator. I'm thinking one unit in the numerator, one in the denominator, and one power given for each sounds like a viably complex, sufficiently flexible spec.

Makeshifts last the longest.

  • Comment on Re^3: The Definitive Unit Conversion Script

Replies are listed 'Best First'.
(tye)Re3: The Definitive Unit Conversion Script
by tye (Sage) on Dec 13, 2002 at 20:20 UTC

    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?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://219716]
NodeReaper serves mincemeat tarts with the cider

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (4)
As of 2017-02-26 15:16 GMT
Find Nodes?
    Voting Booth?
    Before electricity was invented, what was the Electric Eel called?

    Results (375 votes). Check out past polls.