Division -> Prüfung ob Zahl Ganzzahl ist

Hallo!

okay *BrettvormKopfwegnehm*. Ihr habt recht, wobei es auch hier ein Genauigkeitsproblem gibt...
Code:
        System.out.println(20.0 % 5.000000000000001);
        System.out.println(20.0 % 5.0000000000000001);

Okay, wenn wir dann den Modulo verwenden, dann aber auch den richtigen... bei Rechnen mit Fliesskommazahlen sollte man besser den Math.IIIERemainder(...) verwenden.
http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.17.2

Also:
Code:
		//double a = 1000.000000000000001;
		double a = 1000.00000000000001;
		double b = 20.00;
		
		double c = a / b;
		
		if (isNearZero(Math.IEEEremainder(a,b))){
			System.out.println(c + " ist ganzzahlig");
		}else{
			System.out.println(c + " ist nicht ganzzahlig");
		}

Gruss Tom
 
Hallo,
AFAIK - die Mathematik mag sich geändert haben - liefert der Modulo nur dann 0, wenn bei bei der Division A/B der Wert von A ein ganzzahliges Vielfaches von B ist. Dabei ist es völlig unerheblich, ob A und/oder B gerade oder ungerade Zahlen sind.

Mathematisch gesehen ist das vielleicht unerheblich aber unerheblich ist nicht das der
Modulo Operator eigentlich nur fuer Ganzzahlen definiert ist. => Man kann den Modulo Operator
mal abgesehen von Java auf Dezimalzahlen nicht anwenden. In andren Sprachen wird das
hoechstwahrsch in die Hose gehen bzw der Compiler wird es noch nicht mal kompilieren...

Gruß

RedWing
 
Falls das noch jemand mal bei der Recherche ausgräbt: Eine kompakte Lösung wäre eventuell auch, falls der Quotient vom Typ Double ist (sonst ggf. durch float ersetzen)

bool istGanzeZahl = (Quotient == ((double)Math.Abs(Quotient)))
 
Habe das hier gerade nochmal ausgegraben und möchte daruaf hinweisen, das folgendes nicht funktioniert:

Falls das noch jemand mal bei der Recherche ausgräbt: Eine kompakte Lösung wäre eventuell auch, falls der Quotient vom Typ Double ist (sonst ggf. durch float ersetzen)



bool istGanzeZahl = (Quotient == ((double)Math.Abs(Quotient)))

Richtig und viel einfach als alle obrigen vorschläge ist:
Code:
double d = 5.77;
boolean b = (d == Math.floor(d));
 
Zurück