Code:
$ ./s1
Environment: LC_ALL = C, LANG = C
(Versions displayed with local utility "version")
OS, ker|rel, machine: Linux, 3.16.0-4-amd64, x86_64
Distribution : Debian 8.7 (jessie)
bash GNU bash 4.3.30
perl 5.20.2
dixf (local) 1.42
-----
Perl code p1:
#!/usr/bin/env perl
# @(#) p1 Demonstrate recognition of reals, round to lower precision.
# Problem with 10463.580902756539
# $decimal_line = sprintf( "%.2f", $decimal_line ) if ( $decimal_line =~ /[-+]?[0-9]*(\.[0-9][0-9]+$)/ ) ;
use strict;
use warnings;
use Regexp::Common qw /number/;
my ( @a, $i );
while (<>) {
chomp;
@a = split(/,/);
for ( $i = 0; $i <= $#a; $i++ ) {
if ( $a[$i] =~ /^$RE{num}{real}$/ ) { # format if real
printf( "%.2f", $a[$i] );
print "," if $i < $#a;
}
else {
printf( "%s", $a[$i] );
print "," if $i < $#a;
}
}
print "\n";
}
-----
Input data file data1:
26200000,1,14771,12/31/2016,N,3.542377036225,0.840074561430,-1.236050220213,4.214781311068,,,,,,,,,,,4.635809027565,,,,,,,,,4.635809027565,XXXX,02/09/2017,,,,,,,,,A,XX,10463.580902756539
-----
Results:
26200000.00,1.00,14771.00,12/31/2016,N,3.54,0.84,-1.24,4.21,,,,,,,,,,,4.64,,,,,,,,,4.64,XXXX,02/09/2017,,,,,,,,,A,XX,10463.58
-----
Details for ./p1:
p1 Demonstrate recognition of reals, round to lower precision. (what)
Path : ./p1
Version : 13.
Length : 27 lines
Type : Perl script, ASCII text executable
Shebang : #!/usr/bin/env perl
Modules : (for perl codes)
strict 1.08
warnings 1.23
Regexp::Common 2013031301