Strings und Zahlen (2)
Hin und her zwischen String und Zahl
Analog zur Umwandlungsmethode Integer.parseInt(), die wir auf der vorigen Seite kennen gelernt haben, gibt es die parse-Methode auch für andere Variablentypen, z.B. Double.parseDouble(), die Strings in Double-Zahlen verwandelt. Hier entstehen jedoch gewissen Konflikte, mit denen man sich irgendwann auseinandersetzen muss.
Die Scannermethode Eingabe.nextDouble() und die Ausgabemethode System.out.format() berücksichtigen die jeweiligen Ländereinstellungen des Computers. Das heißt, dass sie in Deutschland die Eingabe von Dezimalbrüchen mit Dezimalkomma erwarten und Dezimalbrüche mit Komma ausgeben.
Im Gegensatz dazu erwartet die Umwandlungsfunktion Double.parseDouble() als Argument einen String, in dem der Dezimalbruch mit Punkt geschrieben ist. Entsprechend gibt System.out.println() Dezimalbrüche mit Dezimalpunkt statt Komma aus.
Was ist zu tun? Zum Glück stellt die Klasse String die Methoden String.contains() und String.replace() zur Verfügung, mit der man jedes Vorkommen eines bestimmten Zeichens in einem String erkennen und das Zeichen leicht durch ein anderes Zeichen ersetzen kann. Wenn Sie auf die Eingabeaufforderung hin eine Zahl mit Punkt schreiben, kann Java direkt damit rechen. Geben Sie die Zahl mit Komma ein, so wird sie zum Rechnen umgewandelt und später zurückverwandelt.
Hier ein Beispielprogramm.
import java.util.*;
public class PunktUndKomma {
public static void main(String[] args) {
System.out.println("Punkt und Komma");
Scanner Eingabe = new Scanner(System.in);
boolean kommaErsetzt = false;
System.out.print("\nGib bitte eine Kommazahl ein : ");
String antwort = Eingabe.next();
if (antwort.contains(",")) {
antwort = antwort.replace(',','.');
System.out.println("Ich ersetze Kommas durch
Punkte: "+antwort);
kommaErsetzt = true;
}
double zahl = Double.parseDouble(antwort);
zahl = zahl/2;
System.out.println("Die Hälfte von deiner Zahl ist : "+zahl);
String ausgabe = String.valueOf(zahl);
if (kommaErsetzt) {
ausgabe = ausgabe.replace('.',',');
System.out.println("Ich ersetze Punkte durch
Kommas: "+ausgabe);
}
}
}
Aufgaben: