- if ($shift_amount > 0) {
- $value <<= ($shift_amount * 10);
- } elsif ($shift_amount < 0) {
- my $remainder = ($value & (1 << abs($shift_amount)*10) - 1);
- $value >>= abs($shift_amount) * 10;
- $value++ if $remainder && !$no_round_up;
- }
+ my $shift_amount = ($units->{$from} - $units->{$to}) * 10;
+
+ $value *= 2**$shift_amount;
+ $value++ if !$no_round_up && ($value - int($value)) > 0.0;