Perl, 5050 60 bytes
$_=<>;s|\.||;$_<<=1;m|\d||;$_<<=1;$_="00$_";m|\d{3}$|;printf'%.2f',"$`.$&"
The input is expected at STDIN. It must contain the decimal separator with two decimal digits. The output is written to STDOUT.
Update: The step $_<<=1
removes leading zeroes. Therefore m|\d{3}$|
would not match for bills < 1. Therefore ten bytes $_="00$
were added, Now even 0.00
works.
Examples:
- Input:
20.96
, output:4.19
- Input:
12.34
, output:2.47
Ungolfed version:
$_=<>;
s|\.||; # multiply by 100
$_ <<= 1; # multiply by 2
$_="00$_";
m|\d{3}$|; # divide by 1000
printf '%.2f'," $`.$&"
First the number is read from STDIN. Then the decimal dot is removed, that is multiplied with 100. Then the amount is doubled by a shifting operator. Then the decimal dot is reinserted and the result is printed and rounded to two decimal digits.
50 bytes, if bill ≥ 1:
If x.xx
is greater or equal than 1.00
, then 10 bytes can be removed:
$_=<>;s|\.||;$_<<=1;m|\d{3}$|;printf'%.2f',"$`.$&"