Well, something is to be said for approaching a problem from different points of view and uncovering new truths. So I'll give it a try.
The solution wasn't as smooth as I'd hope, apparently -0.0 == 0.
my $sign = "";
my $number = -0.000001;
my $example = sprintf("%.5f", $number);
#$example = $number; #uncomment this, to remove the initial rounding
print "A. Started with : $example \n";
if ($example < 0) {
$example = -$example;
$sign = "-";
print "B. Less than zero: changed to $example \n";
}
print "C. the number is $example \n";
if ($example == 0 )
{
print "D1. the number ($example) is equal to zero, removing the si
+gn.\n";
$example *= -1; #(couldn't hurt, it's zero)
print "D2. the number ($example) is equal to zero, removing the si
+gn.\n";
$sign = '';
}
print "E. proceeding to sprint $example with sign $sign .\n";
$tret = sprintf("rounded float: %s%7.5f : unrounded %7.5f", $sign, $ex
+ample, $number);
print "$tret \n";
Output:
A. Started with : -0.00000
C. the number is -0.00000
D1. the number (-0.00000) is equal to zero, removing the sign.
D2. the number (0) is equal to zero, removing the sign.
E. proceeding to sprint 0 with sign .
rounded float: 0.00000 : unrounded -0.00000
|