String mit Zahlenwert --> ohne Nachkommastelle und ggf aufgerundet

Reaver1988

Mitglied
Hi,

ersteinmal will ich mich für eure Antworten im Vorfeld bedanken. Nun zu meinem "Problem", welches eigentlich keines sein sollte 😳

Ich habe eine Variable, nennen wir sie "Zahl", diese ist vom Typ String und enthält z.B. "45600,01"
Ich möchte diese Zahl in einem Textfeld abbilden, welches keine Nachkommastellen erlaubt. Soweit so gut, mit substring und indexOf(',') hätte ich die 45600 und alles würde funktionieren, ALLERDINGS ist die Vorgabe, dass wenn die nachkommastellen irgendwie vorhanden sind (egal wie klein, aber es gibt max nur 2 Nachkommastellen), sprich "x,01" ; "x,02;" usw dann soll aufgerundet werden. In dem obigen Beispiel sollte also "456001" rauskommen.
Ich habe es so probiert:
Java:
String Zahl = new String("45600,01");
if(Integer.getInteger(Zahl.substring(Zahl.indexOf(',')+1))>0){
     Zahl = String.valueOf((Integer.getInteger(Zahl.substring(0, Zahl.indexOf(',')))+1));
}

Was wollte ich theoretisch machen?
- Schauen, ob der in integer umgewandelte String ab dem ","(also die 01 in dem Falle) ein Wert > 0 ist
- Wenn dem so ist, dann nehme den Integer-Wert von der Stelle 0 bis zum "," (Also 45600) und addiere 1 hinzu

Ich weiß, dass es einfacher wäre es direkt als Integer zu machen, allerdings bekomme ich die Zahl als String und muss sie nach verarbeitung auch als String wieder zurückgeben.

Ich hoffe ich habe mein Anliegen verständlich beschrieben und ggf. hat ja jemand eine Idee was falsch läuft, wie ich es einfacher/kürzer machen kann.
 
Zuletzt bearbeitet:
das geht aber nur, wenn der String wirklich eine Double/Int ist ,...
hier wird aber auch bei ,00 aufgerundet.... meintest du damit, dass das auch zählt oder zählt es erst ab ,01 ?


Java:
String zahl = new String("45600,22");
		int i;
		try{
			i=Integer.parseInt(zahl);
		}catch(NumberFormatException e){
			i=(int) Double.parseDouble(zahl.replace(",","."));
			i++;
		}
		System.out.println(i);
 
Zuletzt bearbeitet:
So ein Müll war es garnicht, ich habe es mal mit parseInt, anstelle von "ValueOf" probiert und das sieht schon einmal besser aus 😉 jetzt habe ich irgendwo noch einen kleinen Logik Fehler drinne den ich grade suche
 
ich habs nochmal geändert, da du ja in jedem Fall aufrunden willst (hatte ich überlesen), wenn Nachkommastellen vorhanden sind ...
 
Super danke dir 🙂 hast mich auf den richtigen Weg gebracht. Meine funktionierende Idee war jetzt übrigens:
Java:
String zahl = new String("45600,01");
        if (Integer.parseInt(zahl.substring(zahl.indexOf(',') + 1)) > 0) {
            zahl = String.valueOf((Integer.parseInt(zahl.substring(0, zahl.indexOf(','))) + 1));
        }

Deine lösung ist natürlich eleganter, da direkt mit abgefangen wird, ob es überhaupt eine Zahl ist. Ich werde das noch umbauen und bedanke mich herzlichst bei dir
 
bei deinem Code musst du noch nen "Else"- Block einbauen da du wenn du die Zahl "333,00" hast das Ergebnis 333,00 is und nicht 333 🙂

kann man auch noch abkürzen aber hier nochmal in der "langen" Version 😀
Java:
String zahl = new String("45600,00");
		
		int index=zahl.indexOf(",");
		int fertigezahl;
		
		if(index>0){
			fertigezahl=Integer.parseInt(zahl.substring(0, index));
			int i=Integer.parseInt(zahl.substring(index+1, zahl.length()));
			
			if(i>0){
				fertigezahl++;
			}
		}else{
			fertigezahl=Integer.parseInt(zahl);
		}
		System.out.println(fertigezahl);
 
Ich würde ja eher auf die Methode
Code:
Math.ceil(double)
zurückgreifen, da braucht man auch keine verschachtelten if-Abfragen oder sonstiges:
Java:
String s = "333,01";
s = s.replace( ",", "." );
int result = (int) Math.ceil( Double.valueOf( s ) );
System.out.println( result ); // 334

E: da ihr anscheinend auf "kurzen Code" Wert legt:

Java:
System.out.println( (int) ( Math.ceil( Double.valueOf( "333,00".replace( ",", "." ) ) ) ) ); // 333
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben