Letze Steller einer integer Zahl

Bluedaishi

Bekanntes Mitglied
Hallo
folgendes problem gibt es eine möglichkeit einen integer wert anletze stelle entweder auf 5 oder 0 zu runden.

vielen dank
 

JStein52

Top Contributor
es gibt sicher mehrere Möglichkeiten. Eine wäre zahl%5 und je nach Rest diesen Rest von der Zahl subtrahieren oder 5-Rest addieren.
 
K

kneitzel

Gast
Code:
int modulo = zahl % 5;
switch (modulo) {
   case 0: ...
   case 1: ...
   case 2: ...
   case 3: ...
   case 4: ...
}
Die ... musst Du noch füllen. "break;" nicht vergessen wo notwendig. Die möglichen Aktionen sind:
- Zahl unverändert lassen (dann war es schon am Ende auf 0 oder 5)
- zahl = zahl - modulo;
- zahl = zahl - modulo + 5;

Das wirst Du doch jetzt hin bekommen. Ansonsten geh das doch einfach einmal mit verschiedenen Zahlen durch und schau, was zahl % 5 ist und was Du gerne als Ergebnis hättest....
 
K

kneitzel

Gast
Statt der Berechnungen kannst Du natürlich auch für jedes case einfach eine fixe Berechnung machen wie zahl+=1; zahl -= 1; und so ...
 

Bluedaishi

Bekanntes Mitglied
Na als ergebnis brauche ich die letzte stelle 5 oder 0 ich hab leider etwas druck ich muss das bis 21 uhr zu einer fertigen lösungen haben
 

JStein52

Top Contributor
so:

Code:
//        int zahl = 148;
      
        if ((zahl%5) < 3 )
            zahl -= zahl%5;
        else
            zahl += 5-zahl%5;
      
//        System.out.println("5: "+zahl);
 
K

kneitzel

Gast
Also da wird so oft %5 gerechnet ... das muss doch nur einmal sein. Und die folgende Version ist doch einfacher verständlich:
Code:
switch (zahl%5) {
   case 1: zahl -= 1; break;
   case 2: zahl -= 2; break;
   case 3: zahl += 2; break;
   case 4: zahl += 1; break;
}

Und auf so eine Lösung kommt man sofort, wenn man einfach die folgende Tabelle für die Zahlen von 1 - 10 füllt:

Zahl; zahl%5; gewünschtes Ergebnis; gewünschtes Ergebnis - zahl
1; 1; 0; -1
2; 2; 0; -2
3; 3; 5; 2
4; 4; 5; 1
5; 0; 5; 0
6; 1; 5; -1
7; 2; 5; -2
8; 3; 10; 2
9; 4; 10; 1
10; 0; 10; 0

Oder nicht?
 

JStein52

Top Contributor
Ja, in deinen Cases machst du das gleiche wie ich und klar kann man sich das modulo-Ergebnis einmal ausrechnen und dann weiter verwenden.
 

Bluedaishi

Bekanntes Mitglied
JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA SUPER EIN DICKES DANKE SCHHÖNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
 

Blender3D

Top Contributor
Code:
int roundToFive(  int zahl )
           int mod = zahl%5;
           if( mod == 0 ) return zahl;
           if( mod < 3  )  return zahl-mod;
           return zahl + 5- mod;
}
Oder so ! :)
 

Bluedaishi

Bekanntes Mitglied
//int zahl = 148;

if ((zahl%5) < 3 ) <= müsste hier nicht 4 stehen ??????
zahl -= zahl%5;
else
zahl += 5-zahl%5;

// System.out.println("5: "+zahl);
 

Meniskusschaden

Top Contributor
Folgendes ist auch möglich:
Java:
public static int roundToFive(int zahl) {
    return (zahl+2)/5*5;
}
Ist zwar kurz, gefällt mir aber nicht, weil es falsch aussieht und deshalb nicht intuitiv lesbar ist.
 

JStein52

Top Contributor
Für negative Zahlen müsste man noch ein bisschen anpassen:

Code:
        int zahl = -3578 ;
        int faktor = 1;
        if (zahl < 0) {
            faktor = -1;
            zahl   = Math.abs(zahl);
        }
       
        if ((zahl%5) < 3 )
            zahl -= zahl%5;
        else
            zahl += 5-zahl%5;
        zahl *= faktor;
        System.out.println("5: "+zahl);
 

JStein52

Top Contributor
3574 ist natürlich positiv und da hatte es ja auch vorher schon funktioniert !!! Mir war nur aufgefallen dass bei negativen Zahlen in die falsche Richtung gerundet wurde. Es war zwar auch immer 0 oder 5, manchmal aber falsch.
 

Bluedaishi

Bekanntes Mitglied
ok verstanden ich habe nur positive werte

also ich habe eine summe 3600 rechne prozentual 2,5 prozent runter (ist nur als beispiel) draus werden dann diese 3574 das sind bisdahin noch double werte dann wandle ich sie mit df.format ins einen String
von da aus wieder in einen int wert dann durch deine schleife und dan wieder df.format vielleicht liegt das daran ????
 

Bluedaishi

Bekanntes Mitglied
Java:
 String Ein_My = df.format(doub_minus_My);

int pla_int = Integer.parseInt(Ein_My);
               
     
                    if ((pla_int%5) < 3 ){
                        pla_int -= pla_int%5;
                    }else{
                        pla_int += 5-pla_int%5;
                    }

                Ein_My = df.format(pla_int);

raf.writeBytes(Ein_My);
 

InfectedBytes

Top Contributor
deinen double in einen string umwandeln um diesen dann in einen int umzuwandeln ist keine besonders gute idee. Du kannst direkt den double zu einem int casten:
Java:
int pla_int = (int)doub_minus_My;
 

JStein52

Top Contributor
Mach mal:

Code:
                Ein_My = df.format(pla_int);
                System.out.println("String: "+Ein_My+" Zahl: "+pla_int);
 

Neue Themen


Oben