in reply to Re: Re: Re: Separating big numbers with commas
in thread Separating big numbers with commas
Which will result in the string 1,2,3,4,5,6,7; Not quite what we were looking for.$number=1234567; # with commas, should be "1,234,567" $number =~ s/(\d)(?=(\d{3})+(\D|$))/$1\,/g;
Your second example both extends the string and adds a decimal portion, and does not work either.
Resulting in 1,234,567,890.0,1; You will notice the comma in the decimal portion of the resulting string. I find it strange the the output you presented in your message is correct. Did you paste it from a run, or transcribe it and introduce the alteration in the result by accident? As pointed out by Anon, if you introduce a few more decimal places you will end up with more commas in the decimal portion.$number='1234567890.01'; $number =~ s/(\d)(?=(\d{3})+(\D|$))/$1\,/g;
Resulting in 1,234,567,890.0,1,2,3,4,5,6,7,8,9.$number='1234567890.0123456789'; # with commas, should be "1,234,567,8 +90.01 $number =~ s/(\d)(?=(\d{3})+(\D|$))/$1\,/g;
The problem comes in because we are testing against \D|$ to determine when to place to commas. This allows commas to be placed in the decimal portion. I don't have a great solution but you can do something like the following:
The are better solutions presented, I just wanted to respond to why this example did not work.$number='1234567890'; # with commas, should be "1,234,567,890.01 $number .= '.' if ($number !~ /\./); # Make sure we end with a decimal + if we don't have a decimal $number =~ s/(\d)(?=(\d{3},?)+(\.))/$1\,/g; chop $number if ($number =~ /\.$/); # Get rid of that useless trailing + decimal print "N $number \n"; $number='1234567890.01234567687'; # with commas, should be "1,234,567, +890.01 $number .= '.' if ($number !~ /\./);# Make sure we end with a decimal +if we don't have a decimal $number =~ s/(\d)(?=(\d{3},?)+(\.))/$1\,/g; chop $number if ($number =~ /\.$/); # Get rid of that useless trailing + decimal print "N $number \n";
|
|---|