Addition et soustraction avec virgule n chiffres

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 035 fois - Téléchargée 14 fois

Contenu du snippet

comme il existe plusieurs editeur et compilateur différents
je poste sans zip deux fonctions qui sont l'addition et la soustraction,ça s'addresse au débutants.

Source / Exemple :


public static  String Sous (String a,String b)
    { String res ="";
      int i,m,n,l,w,x;
      int y = 0;
      int max = 0;
      int r =0;
      int base = 10;

      // Supprimer les virgules
      if (a.indexOf(",")> 0 && b.indexOf(",")> 0)
      { w = a.length() - a.indexOf(",");
        x = b.length() - b.indexOf(",");
        if (w>x)
        { b = b.replace(",", "");
          a = a.replace(",", "");
          for (i = 1 ; i <= w-x;i++)
          { b = b + "0";}
          y = w;
        }    
        else if (x > w)
        { b = b.replace(",", "");
          a = a.replace(",", "");
          for (i = 1 ; i <= x-w;i++)
          { a = a + "0";} 
          y = x;
        }   
        else if (x == w)
        { b = b.replace(",", "");
          a = a.replace(",", "");
          y = x;   
        }
      }   
      else if (a.indexOf(",")>0 && b.indexOf(",")==-1)
      { w = a.length() - a.indexOf(",");
        for (i = 1 ; i< w; i++)  
        {   b = b + "0";}
        a = a.replace(",", "");
        y = w;
      }
      else if (b.indexOf(",")>0 && a.indexOf(",")== -1)    
      { x = b.length() - b.indexOf(",");
        for (i = 1 ; i <x;i++)
        { a = a + "0";}
        b = b.replace(",", "");
        y = x;
      }    
         
     // Réduit chaque chaines à la même longueur
      if (a.length()> b.length())
      { max = a.length();
       l = max - b.length();
        for (i =1 ;i <=l;i++)
        { b = "0"+ b;}     
      }   
      else if (b.length()> a.length())
      { max = b.length();
        l = max - a.length();
        for (i=1 ; i <= l;i++)
        { a = "0" + a;}
      }    
      else if (a.length() == b.length())
      { max = a.length(); }
      
      // Soustrait
      String a1,b1;
      for (i = max; i>0;i--)
      { a1= a.substring(i-1,i);
        b1= b.substring(i-1,i);
          m = Integer.valueOf(a1);
          n = Integer.valueOf(b1);
          r = m - r -  n;
        if (r<0)
        { a1 = String.valueOf(r+base);
           r=1;
        }   
        else
        { a1 = String.valueOf(r);
            r=0;
        }   
          res = a1 + res;         
      }
      
      // Met la virgule s'il y a lieu
      if (y != 0) res = res.substring(0,res.length()-(y-1)) + ","+ res.substring(res.length()-(y-1),res.length());
         // Supprime les zéros à gauche
            int k=0;
            l = res.length();
            for (i = 1; i < l;i++)
            { if (res.charAt(i-1) != '0') break;  
                k ++;
            }    
       res = res.substring(k,res.length());     
       if (y !=0)  
       {// Supprime les zéros à droite
            int j=0 ; 
            for (i= res.length();i > 0 ; i--)
            { if (res.charAt(i-1)!= '0') break;
                j ++;
            }
       res = res.substring(0,res.length()-j);
       if (j==(y-1))
       {res = res + "0";}   
       }   
       if ( res.indexOf(",")== 0 ) res = "0" + res;
       return res;
    }       

 public static  String Add (String a,String b)
    { String res ="";
      int i,m,n,l,w,x;
      int y = 0;
      int max = 0;
      int r =0;
      int base = 10;

      // Supprimer les virgules
      if (a.indexOf(",")> 0 && b.indexOf(",")> 0)
      { w = a.length() - a.indexOf(",");
        x = b.length() - b.indexOf(",");
        if (w>x)
        { b = b.replace(",", "");
          a = a.replace(",", "");
          for (i = 1 ; i <= w-x;i++)
          { b = b + "0";}
          y = w;
        }    
        else if (x > w)
        { b = b.replace(",", "");
          a = a.replace(",", "");
          for (i = 1 ; i <= x-w;i++)
          { a = a + "0";} 
          y = x;
        }   
        else if (x == w)
        { b = b.replace(",", "");
          a = a.replace(",", "");
          y = x;   
        }
      }   
      else if (a.indexOf(",")>0 && b.indexOf(",")==-1)
      { w = a.length() - a.indexOf(",");
        for (i = 1 ; i< w; i++)  
        {   b = b + "0";}
        a = a.replace(",", "");
        y = w;
      }
      else if (b.indexOf(",")>0 && a.indexOf(",")== -1)    
      { x = b.length() - b.indexOf(",");
        for (i = 1 ; i <x;i++)
        { a = a + "0";}
        b = b.replace(",", "");
        y = x;
      }    
         
     // Réduit chaque chaines à la même longueur
      if (a.length()> b.length())
      { max = a.length();
       l = max - b.length();
        for (i =1 ;i <=l;i++)
        { b = "0"+ b;}     
      }   
      else if (b.length()> a.length())
      { max = b.length();
        l = max - a.length();
        for (i=1 ; i <= l;i++)
        { a = "0" + a;}
      }    
      else if (a.length() == b.length())
      { max = a.length(); }
      
      // Additionne
      String a1,b1;
      for (i = max; i>0;i--)
      { a1= a.substring(i-1,i);
        b1= b.substring(i-1,i);
          m = Integer.valueOf(a1);
          n = Integer.valueOf(b1);
          r = m + r +  n;
        if (r>= base)
        { a1 = String.valueOf(r-base);
           r=1;
        }   
        else
        { a1 = String.valueOf(r);
            r=0;
        }   
          res = a1 + res;
      
          if ((r==1) && (i==1)) res = "1"+ res;   
      }
      
      // Met la virgule s'il y a lieu
      if (y != 0)
       { res = res.substring(0,res.length()-(y-1)) + ","+ res.substring(res.length()-(y-1),res.length());
           // Supprime les zéros à droite
            int j=0 ; 
            for (i= res.length();i > 0 ; i--)
            { if (res.charAt(i-1)!= '0') break;
                j ++;
            }
       res = res.substring(0,res.length()-j);
       if (j==(y-1))
       {res = res + "0";}   
      }    
      return res;
    }

A voir également

Ajouter un commentaire

Commentaires

Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
38
j'en ai. mais pas en java (je pourrais les refaire en java, mais j'en ai pas l'utilite)
Messages postés
74
Date d'inscription
jeudi 10 août 2006
Statut
Membre
Dernière intervention
24 mars 2013

coucou 747 je pensai que tu avez des codes bien plus rapides et meilleurs que le mien.
petifa je prends note de tes suggestions.
mais mon but etait de corriger une erreur qui se produit de temps en temps lorsque l'on utilise les opérations en float ou en double, peut être que j'améliorerai ces deux opérations merci.
Messages postés
215
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
10 mars 2014

ce que je disais concernant la conversion en float était une suggestion. c'étais aussi pour avoir plus de précision su rle but de la source.
Sinon en tout cas si tu garde ce mode la tu devrais factoriser ton code, regrouper dans une fonction l'ajout de 0 avant et après dans la chaine, avec comme paramètre le string (a ou b) ainsi que le nombre de 0 et pourquoi pas un booléen pour dire si c'est en début ou en fin de chaine...
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
38
j'ai produit plusieurs sources.

je ne sais pas ce que tu entends par sensible, mais en general, les admins ne suppriment que les sources inutiles et les sources illegales (et c'est pas trop mon genre de trip.)
Messages postés
74
Date d'inscription
jeudi 10 août 2006
Statut
Membre
Dernière intervention
24 mars 2013

petifa ces deux opérations peuvent traiter des nombres très grands.
coucou747 merci pour tes conseils , en effet les opérations sont lentes à exucuter toutefois mon but est de donner une source acceptable pour tout le monde je ne sais pas si tu as produit des sources mais si tu produit une source un peu trop sensible les administrateur la supprimeront aussitot.
encore merci pour vos commentaires.
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.