Strtol

Score: 477.66 (fail)

300 Characters for the number strings. ;-)

I get "3,000 " (with a trailing space) instead of "3,000", and "6,0 ,0 ,0 ,000" instead of "6,000,000".

#!perl -ln
%n=(billion,1E9,eight,8,eighteen,18,eighty,80,eleven,11,fifteen,15,fifty,50,five,5,forty,40,four,4,fourteen,14,hundred,100,million,1E6,nine,9,nineteen,19,ninety,90,one,1,seven,7,seventeen,17,seventy,70,six,6,sixteen,16,sixty,60,ten,10,thirteen,13,thirty,30,thousand,1E3,three,3,twelve,12,twenty,20,two,2);$r=$n=0;while(/(\w+)/g){$t=$1;if($t=~/^(m|b|tho)/){$r+=$n*$n{$t};$n=0}elsif($t=~/^h/){$n*=100}else{$n+=$n{$t}}}$r+=$n;$_="$r ";1while s/(\d)(\d\d\d)/$1 ,$2/;s/ //;print

Score: 482.66 (pass)

#!perl -ln
%n=(billion,1E9,eight,8,eighteen,18,eighty,80,eleven,11,fifteen,15,fifty,50,five,5,forty,40,four,4,fourteen,14,hundred,100,million,1E6,nine,9,nineteen,19,ninety,90,one,1,seven,7,seventeen,17,seventy,70,six,6,sixteen,16,sixty,60,ten,10,thirteen,13,thirty,30,thousand,1E3,three,3,twelve,12,twenty,20,two,2);$r=$n=0;while(/(\w+)/g){$t=$1;if($t =~ /^(m|b|tho)/){$r+=$n*$n{$t};$n=0;}elsif($t=~/^h/){$n*=100;}else{$n+=$n{$t}}}$r+=$n;$_="$r ";1while s/(\d)(\d\d\d) /$1 ,$2/;s/ //;print