package javacodebook.core.numbertools; public class NumberToolbox { private static final double DOUBLE_DELTA = 0.000000000000001d; private static final float FLOAT_DELTA = 0.000001f; /** * Verwandelt einen String in eine Int-Zahl. */ public static int parseInt(String str, int defaultVal) { try { return Integer.parseInt(str); } catch (Exception e) { return defaultVal; } } /** * Verwandelt ein beliebiges Objekt in eine Int-Zahl */ public static int parseInt(Object obj, int defaultVal) { if (obj == null) return defaultVal; else if (obj instanceof Number) return ((Number)obj).intValue(); else return parseInt(obj.toString(), defaultVal); } /** * Vergleicht zwei Float-Zahlen mit einer geringen Toleranz * Wenn |f1-f2| < delta gilt, wird f1 == f2 angenommen */ public static int cmpFloat(float f1, float f2) { return cmpFloat(f1, f2, FLOAT_DELTA); } /** * Vergleicht zwei Float-Zahlen mit einer geringen Toleranz. * Wenn |f1-f2| < delta gilt, wird f1 == f2 angenommen */ public static int cmpFloat(float f1, float f2, float delta) { if (Math.abs(f1-f2) < delta) return 0; else if (f1 > f2) return 1; else return -1; } /** * Vergleicht zwei Double-Zahlen mit einer geringen Toleranz * Wenn |d1-d2| < delta gilt, wird d1 == d2 angenommen */ public static int cmpDouble(double d1, double d2) { return cmpDouble(d1, d2, DOUBLE_DELTA); } /** * Vergleicht zwei Double-Zahlen mit einer geringen Toleranz * Wenn |d1-d2| < delta gilt, wird d1 == d2 angenommen */ public static int cmpDouble(double d1, double d2, double delta) { if (Math.abs(d1-d2) < delta) return 0; else if (d1 > d2) return 1; else return -1; } } --- Neue Klasse --- package javacodebook.core.numbertools; public class CompareStarter { public static void main(String []args) { // Zwei Zahlen werden aus einer Berechnung erzeugt // und anschliessend miteinander verglichen. double a = (2d/3d); System.out.println(a); double b = (2.2d/3.3d); System.out.println(b); if (a == b) System.out.println("a == b"); else System.out.println("a != b"); // Das gleiche noch einmal. In dieser Version wird // für den Vergleich jedoch eine Funktion aus der // Klasse NumberToolbox genutzt. if (NumberToolbox.cmpDouble(a, b) == 0) System.out.println("a ist gleich b"); else System.out.println("a ist nicht gleich b"); } } --- Neue Klasse --- package javacodebook.core.numbertools; public class ParseIntStarter { public static void main(String args[]) { String zahlStr = "1234"; int zahlInt; // Belegt die Variable zahlInt mit dem Integer-Wert // eines Strings. Wenn die Umwandlung fehlschlägt, // hat die Variable zahlInt den Wert 6. zahlInt = 6; try { zahlInt = Integer.parseInt(zahlStr); } catch (Exception e) {} System.out.println(zahlInt); // Tut das genau gleiche, nur ist der Code viel // übersichtlicher und kompakter. zahlInt = NumberToolbox.parseInt(zahlStr, 6); System.out.println(zahlInt); } }