#!/usr/bin/perl use strict; use warnings; my $x = -666; my $y = sprintf("%23.16e\n", $x); # -6.6600000000000000e+02 if ($y =~ m/^(.+)e\+(\d+)$/) { printf("%23.16fD+%02d\n", $1/10, $2+1); # -0.6660000000000000D+03 }