Java, ist die Variable eine natürliche Zahl?

foggy80

Lt. Commander
Registriert
Juli 2008
Beiträge
1.034
Ein nettes Hallo an alle Informatiker, Softwareentwickler, Leute deren Hobby etwas mit Programmieren zu tun hat und alle anderen die sich mit dieser Matierie auskennen,

Ich muss ein Programm in java schreiben, in welches man eine Zahl eingibt und dieses dann dessen Teiler rausgibt. Ja, ich bin Anfänger ;)

Es hängt an einer Stelle:
Wie kann ich das Programm überprüfen lassen, ob eine float Variable eine ganze Zahl ist? Wieso das von Nöten ist, könnt ihr euch bestimmt denken.

Danke schonmal!
foggy
 
Iwiefern Teiler?
 
Evtl. gibt es Funktionen die die Länge einer float (double, int etc.) Variable auslesen können, wahrscheinlich auch die anzahl der Nachkomma Stellen
 
Was du genau mit Teiler meinst, geht mir auch nicht ganz auf.

6. Klasse Bruchrechnen sagt allerdings:

Eine Zahl ist dann eine ganze Zahl, wenn der Nenner ein ganzzahliges Vielfaches des Zählers ist.

Bsp: 6/3=2

3 ist Teiler von 6 ohne Rest.

Was du sicher brauchen wirst, ist der Modulo-Operator.

Du solltest natürlich noch darauf achten, dass die natürlichen Zahlen die 0 nicht enthalten.
 
Zuletzt bearbeitet:
a sei die zu untersuchende Zahl
b sei Teiler
a/b=c
c soll eine natürliche Zahl sein, also auch nicht Null, ganz genau, pstreiter.

pstreiter, der Modulo-Operator ist genau das was ich gesucht hab! Vielen Dank!
 
Sollst du float-Zahlen verwenden? Es würde doch nur Sinn ergeben nach Teilern von Ganzzahlen zu suchen.

Herauszufinden ob in einer float eine Ganzzahl steckt, ist nicht so trivial, denn ein float wird anders gespeichert: Ein float besteht aus einer Mantisse und dem Exonenten. Also wenn du in ein float eine 5 reinsteckst, kann es sein, daß du beim Auslesen 5.0000001 erhältst, eben das Ergebnis aus der gespeicherten Mantisse und dem Exponenten.
 
2 kleine Anmerkungen:

1. vorsicht beim Rechnen mit Variablen verschiedenen Typs:
int drei = 3;
int zwei = 2;
float gleitkomma = drei/zwei;
dann ist gleitkomma 1 NICHT 1,333
mit
float gleitkomma = (float)(drei)/(float)(zwei);
kommt das raus was man "normal" erwartet

2. vorsicht mit sachen wie "ganzen" gleitkommazahlen bzw. mit vergleichen bei gleitkomma
float kommaEins = 0.1;
float kommaDrei = 0.3;
if( kommaEins + kommaEins + kommaEins == kommaDrei ){
// kommt hier nicht hin....
} else {
// das ergebniss ist leider tatsaechlich ungleich, weil z.b. die 0.1 nicht dargestellt werden kann
}

also ist komischerweise hier 0.1+0.1+0.1 != 0.3 denn 0.1 kann nicht genau in der binaerdarstellungweise abgebildet werden. Dieser abbildungsfehler ist zwar gering, addiert sich dann aber logischerweise auf, so das am ende leider nicht exact die gleiche binaerdarstellung wie von 0.3 rauskommt.

Also wenn du mit Gleitkommazahlen vergleichst IMMER ein Intervall abpruefen.
Je nach debugger kann man dann verzweifeln wenn beide variablen auf 0.3 gerundet werden in dessen anzeige, der Vergleich aber trotzdem schief geht. [ja hab ich leidvoll erfahren muessen]

Gruss,
Freak
 
Genau, Modulo ist die Lösung. Hatte ich vor einiger Zeit auch nocht mit zu tun.

Musst einfach nur schauen, ob Modulo 0 ist, dann haste nen Teiler erwischt ;-) is eigentlich recht simpel.
 
Genau, es soll keine float geteilt werden, sondern eine int durch eine int, und das ergebnis ist eine float, das war jedenfalls meine ursprünglich geplante Vorgehensweise.

Durch eure Hilfe dachte ich dann eher daran zu prüfen, ob int1 % int2 != 0, also genau das was rueckspiegel gemeint hat. Ich bin mit meinem Javacode zwar noch nicht fertig, aber ich denke das sollte so klappen.
 
Zurück
Oben