/*------------------------------------------------------*/
      /*             SUMBEVARENDE AFRUNDING                   */
      /*                                                      */
      /*  Programmet demonstrerer addition med sumbevarende   */
      /*  afrunding. Man kan selv vælge antallet af decimaler */
      /*  hvormed de afrundede resultater trykkes. For hvert  */
      /*  nyt  tal beregnes  den afrundede værdi efter        */
      /*  5-reglen og efter sumbevaringsreglen. De beregnede  */
      /*  størrelser lagres i lokale variable, og deres       */
      /*  værdier kan hentes af det omgivende program vha.    */
      /*  fire selektorfunktioner.                            */
      /*                                                      */
      /*  H.B.Hansen, februar 1998, revideret juni 1999       */
      /*------------------------------------------------------*/  
  
  
    public class Sumbevar
    {
      //Lokale arbejdsvariable.
      private double forrigeSum = 0;
      private double nySum = 0;         //Partiel sumbevarede sum
      private double realSum = 0;       //Partiel uafrundet sum
      private double x;                 //Aktuelt indtastet tal
      private double diff;              //Aktuelt sumbevaret tal
      
      /*----------------------------------------*/
      /*               SELEKTORER               */
      /*                                        */
      /* De fire følgende funktioner returnerer */
      /* resultatet af beregningerne i procedu- */
      /* ren makeSums.                          */
      /*----------------------------------------*/
      
      public double sumbevSum()
      { return nySum; }
      
      public double femregelSum()
      { return realSum; }
      
      public double tastetTal()
      { return x; }
      
      public double sumbevTal()
      { return diff; } 
      
      /*------------------------------------------------*/
      /*               INITIALISERING                   */
      /*                                                */
      /*  Denne procedure skal kaldes hver gang man vil */
      /*  udføre en ny beregning.                       */
      /*------------------------------------------------*/
      
      public void initialize()
      {
        forrigeSum = 0;
        nySum = 0;
        realSum = 0;
      }
        
    
     /*---------------------------------------------------*/
     /*             AFRUNDING EFTER 5-REGLEN              */
     /*                                                   */
     /*  x afrundes efter 5-reglen p den (dec+1)'te      */
     /*  decimal.                                         */
     /*---------------------------------------------------*/
    
     private double round(double x,int dec)
     {
       int tipot = 1;
       for (int i = 1; i <= dec; i++) tipot *= 10;
       return Math.floor(x*tipot + 0.5)/tipot;
     }
    
    
    
     /*---------------------------------------------------*/
     /*             SELVE BEREGNINGSALGORITMEN            */
     /*                                                   */
     /* Parameteren s er det sidste indtastede tal som en */
     /* String. Der udføres summation efter 5-reglen og   */
     /* med sumbevarende afrunding, afrundet til dec      */
     /* decimaler.                                        */
     /*---------------------------------------------------*/
     
     public void makeSums(String s, int dec)
     {
       Double tal = new Double(s);   //Skab et double-objekt
       x = tal.doubleValue();        //Find dets værdi            
       realSum += x;                 //Adder værdien til uafrundet sum
       nySum = round(realSum,dec);   //Afrund til dec decimaler
       diff = nySum - forrigeSum;    //Find tabeltilvæksten
       forrigeSum = nySum;           //Forbered for næste s
     }
   }
Dette var altså selve algoritmen til sumbevarende afrunding. Det kan være, du er interesseret i at se det drivprogram, jeg benytter i min demo. Den kan du få at se ved at klikke her.