#! perl -slw use strict; while( ) { chomp; printf "Before '%s' becomes ", $_; s[ ( \d+ )+ (?: \. ( \d{0,2} ) ( \d* ) )? % ]{ local $^W; my $n = substr( $2 . '00', 0, 2 ); ($1||'') . $n . ( length($3) ? ".$3" : '' ); }xe; print "'$_'"; } __DATA__ 0.781063003540039% 2.25% 1.455% 4.9% 0.79% 75% 1.15% 0.45999999999999996% 0.9199999999999999% 0.22999999999999998% 1.3%