Merge von 581,589-595 aus unstable: Patch zum Rundungsfehler
authorStephan Köhler <s.koehler@linet-services.de>
Fri, 25 Nov 2005 12:20:05 +0000 (12:20 +0000)
committerStephan Köhler <s.koehler@linet-services.de>
Fri, 25 Nov 2005 12:20:05 +0000 (12:20 +0000)
-Bug 189: Patch zum Rundungsfehler
-sub round_amount schnedet nun anhängende Nullen automatisch ab.
-Änderungen bez. sub round_amound von heute Morgen wieder herausgenommen, weil nonfunktional. Das problem scheint woanders zu liegen.
-Darstellungsfehler bei Ganzzahlen behoben. Vorher wurde bspw. '2' als '2,' dargestellt, nun wird richtig formatiert.
-Die Anzahl der dargestellten Nachkommastellen jedes einzelnen Preises sollte mit der eingegebenen Anzahl
 an Nachkommastellen übereinstimmen. Die eingegebenen Preise sollten nicht gerundet werden.

SL/Form.pm
bin/mozilla/ic.pl

index 2588698..d6cbc0b 100644 (file)
@@ -540,19 +540,19 @@ sub format_amount {
         $amount =~ s/\d{3,}?/$&,/g;
         $amount =~ s/,$//;
         $amount = join '', reverse split //, $amount;
-        $amount .= "\.$dec".$fillup;
+        $amount .= "\.$dec".$fillup if ($places ne '' && $places*1 != 0);
       }
 
       if ($myconfig->{numberformat} eq '1.000,00') {
         $amount =~ s/\d{3,}?/$&./g;
         $amount =~ s/\.$//;
         $amount = join '', reverse split //, $amount;
-        $amount .= ",$dec" .$fillup;
+        $amount .= ",$dec".$fillup if ($places ne '' && $places*1 != 0);
       }
 
       if ($myconfig->{numberformat} eq '1000,00') {
         $amount = "$whole";
-        $amount .= ",$dec" .$fillup;
+        $amount .= ",$dec" .$fillup if ($places ne '' && $places*1 != 0);
       }
 
       if ($dash =~ /-/) {
@@ -604,26 +604,21 @@ sub round_amount {
   $main::lxdebug->enter_sub();
 
   my ($self, $amount, $places) = @_;
-  my $rc;
+  my $round_amount;
 
-  #  $places = 3 if $places == 2;
-
-  if (($places * 1) >= 0) {
-
-    # add 1/10^$places+3
-    $rc =
-      sprintf("%.${places}f",
-              $amount + (1 / (10**($places + 3))) * (($amount > 0) ? 1 : -1));
-  } else {
-    $places *= -1;
-    $rc =
-      sprintf("%.f", $amount / (10**$places) + (($amount > 0) ? 0.1 : -0.1)) *
-      (10**$places);
-  }
+  # Rounding like "Kaufmannsrunden"
+  # Descr. http://de.wikipedia.org/wiki/Rundung
+  # Inspired by 
+  # http://www.perl.com/doc/FAQs/FAQ/oldfaq-html/Q4.13.html
+  # Solves Bug: 189
+  # Udo Spallek
+  $amount       = $amount * (10 ** ($places));
+  $round_amount = int($amount + .5 * ($amount <=> 0))/(10**($places));
 
   $main::lxdebug->leave_sub();
 
-  return $rc;
+  return $round_amount;
+  
 }
 
 
index 81db767..6d49eab 100644 (file)
@@ -1955,6 +1955,16 @@ sub link_part {
 sub form_header {
   $lxdebug->enter_sub();
 
+  my $dec = '';
+  
+  #decimalplaces for listprice
+  ($dec) = ($form->{listprice} =~ /\.(\d+)/);
+  $dec = length $dec;
+  my $decimalplaces = ($dec > 2) ? $dec : 2;
+  $form->{listprice} =
+    $form->format_amount(\%myconfig, $form->{listprice}, $decimalplaces);
+
+  #decimalplaces for sellprice and gv
   ($dec) = ($form->{sellprice} =~ /\.(\d+)/);
   $dec = length $dec;
   my $decimalplaces = ($dec > 2) ? $dec : 2;
@@ -1962,7 +1972,7 @@ sub form_header {
   map {
     $form->{$_} =
       $form->format_amount(\%myconfig, $form->{$_}, $decimalplaces)
-  } qw(listprice sellprice gv);
+  } qw(sellprice gv);
 
   ($dec) = ($form->{lastcost} =~ /\.(\d+)/);
   $dec = length $dec;