ok( $keyword_density >= $min_keyword_density, sprintf( 'Keyword density %.0f%%, minimum %.0f%%', 100 * $keyword_density, 100 * $min_keyword_density, ) ); #### use strict; use warnings; use Test::More; my @in_out = ( [ 1, 3 => '33%' ], [ 1, 30 => '3%' ], # [ 888, 1000 => '88%' ], # Use if we want truncation # [ -888, 1000 => '-88%' ], # Use if we want truncation [ 888, 1000 => '89%' ], # Use if we want rounding [ -888, 1000 => '-89%' ], # Use if we want rounding ); my @code = ( [ f1 => sub { int(100 * $_[0]) . '%' } ], [ f2 => sub { sprintf '%02d%%', 100 * $_[0] } ], [ f3 => sub { sprintf '%2d%%', 100 * $_[0] } ], [ f4 => sub { sprintf '%d%%', 100 * $_[0] } ], [ f5 => sub { sprintf '%.0f%%', 100 * $_[0] } ], ); plan tests => @in_out * @code; foreach (@code) { my ($name, $sub) = @$_; foreach (@in_out) { my ($numer, $denom, $expected) = @$_; my $frac = $numer / $denom; my $percent = $sub->($frac); is($percent, $expected, "$name($numer/$denom)"); # print "$name '$numer/$denom'\t'$expected'\t'$percent'\n"; } print "\n"; }