use 5.012; use POSIX qw(log10 ceil); my $x = -666; my $e = ceil(log10(abs($x))); my $m = $x / 10**$e; printf "%19.16fD%+03d\n", $m, $e;