--- loncom/homework/default_homework.lcpm 2014/06/24 17:02:33 1.165 +++ loncom/homework/default_homework.lcpm 2014/06/25 10:48:39 1.167 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # used by lonxml::xmlparse() as input variable $safeinit to Apache::run::run() # -# $Id: default_homework.lcpm,v 1.165 2014/06/24 17:02:33 raeburn Exp $ +# $Id: default_homework.lcpm,v 1.167 2014/06/25 10:48:39 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -1045,9 +1045,25 @@ sub format_significant_figures { my $numSig = $xint*10**($x10-$sig+$power); if ($numSig =~ /^(\d+)\.(\d+)/) { # insert trailing zero's if have decimal point + my @digarray = split('',$1.$2); + my $sigcount; + while (@digarray > 0) { + my $item = shift(@digarray); + if ($item) { + $sigcount = 1 + @digarray; + last; + } + } + if (($sigcount) && ($sig >= $sigcount)) { + $zeros = substr($zeros,0,($sig - $sigcount)); + } $numSig =~ s/^(\d+)\.(\d+)(\e?(.*)?)$/$1\.$2$zeros$3/; } else { - if ($numSig =~ /0$/) { + if ($numSig =~ /^(\d+)e([\+\-]\d+)$/i) { + my $pre_exp = $1; + my $exponent = $2; + $numSig = $pre_exp.'.'.$zeros.'E'.$exponent; + } elsif ($numSig =~ /0$/) { # add decimal pt for number ending with 0 and length == # of sig figs if (length($numSig) == $sig) { $numSig.='.'; @@ -1055,12 +1071,15 @@ sub format_significant_figures { # exponential form for number ending with 0 and length > # of sig figs my $fmtsig = $sig-1; if ($fmtsig) { - $numSig = sprintf('%.'.$fmtsig.'e',$numSig); + $numSig = sprintf('%.'.$fmtsig.'E',$numSig); } + } elsif (length($numSig) < $sig) { + $numSig.='.'.substr($zeros,0,($sig-length($numSig))); + } + } else { + if (length($numSig) < $sig) { + $numSig.='.'.substr($zeros,0,($sig-length($numSig))); } - } - if (length($numSig) < $sig) { - $numSig.='.'.substr($zeros,0,($sig-length($numSig))); } } # return number with sign