Brauche Hilfe bei Dezimalstellen ausgabe!
-
Vorschlag:
int digits (int z) { int n = (z<0) ? 2 : 1; // negativ? while (z = z/10) n++; // ziffern zaehlen return n; }
Wenn man die 10 in der while-zeile austauscht, geht das analog auch für andere zahlensysteme, wie hex z.b.
int digits (int z, unsigned base) { int n = (z<0) ? 2 : 1; // negativ? while (z = z/base) n++; // ziffern zaehlen return n; }
-
@rbs2 sagte in Brauche Hilfe bei Dezimalstellen ausgabe!:
-999 bringt dich nicht viel weiter.
Das ist keine Antwort auf meine Frage.
q.e.d
Warum hat -1 zwei Dezimalstellen?
Warum nimmst du nicht log10?
-
@dirkb sagte in Brauche Hilfe bei Dezimalstellen ausgabe!:
Warum nimmst du nicht log10?
Das mag keine 0 und keine negativen Zahlen und spuckt außerdem einen 'double'-Wert aus. Die blöden Sonderfälle machen alles nur komplizierter.
int digits (int z) { if (!z) return 1; int sign = (z<0); z = sign ? -z : z; return (int)log10(z)+sign+1; }
-
@rbs2 sagte in Brauche Hilfe bei Dezimalstellen ausgabe!:
Das mag keine 0 und keine negativen Zahlen und spuckt außerdem einen 'double'-Wert aus. Die blöden Sonderfälle machen alles nur komplizierter.
Wenn's doch nur eine einfache, unkomplizierte Lösung gäbe, die alles abdeckt. Leider gibt es keine solche Lösung und sie ist auch nirgendwo in diesem Thread erwähnt worden...
-
@seppj Hier hast du noch viele lustige Lösungen: https://stackoverflow.com/questions/1068849/how-do-i-determine-the-number-of-digits-of-an-integer-in-c
-
@dirkb sagte in Brauche Hilfe bei Dezimalstellen ausgabe!:
@thony2069 sagte in Brauche Hilfe bei Dezimalstellen ausgabe!:
probier mal mit float statt int, da int nur ganze Zahlen annimmt.
Es geht immer noch nicht um Nachkommastellen.
Und selbst wenn wäre
float
/double
nicht geeignet um dezimale Nachkommastellen zu zählen.
-
@seppj sagte in Brauche Hilfe bei Dezimalstellen ausgabe!:
Leider gibt es keine solche Lösung und sie ist auch nirgendwo in diesem Thread erwähnt worden...
Und sie wurde schon so früh nicht erwähnt.
-
@seppj sagte in Brauche Hilfe bei Dezimalstellen ausgabe!:
Wo verwechsel ich was? Ich schreib nirgends was von Stellen. Kompetenz des Programmierers besteht auch darin, einfache, umgangssprachliche Texte zu verstehen, und sich nicht selber Probleme zu machen, wo keine sind.
Hier:
@seppj sagte in Brauche Hilfe bei Dezimalstellen ausgabe!:
denn "weniger als drei Deziamalstellen" ist wirklich 3. Klasse.
@seppj sagte in Brauche Hilfe bei Dezimalstellen ausgabe!:
Kompetenz des Programmierers besteht auch darin, einfache, umgangssprachliche Texte zu verstehen, und sich nicht selber Probleme zu machen, wo keine sind.
Nein, eine Hauptkompetenz besteht darin sich in so einem Fall entweder zu beschweren, das diese umgangssprachliche Formulierung nicht eindeutig ist. Oder das so wartbar umzusetzen, das man es sehr einfach abändern kann. Was genau heisst es, wenn ein int eine "dezimale Zifffer besitzt"? Allein die lange Diskussion hier zeigt ja, das es nicht eindeutig ist.
Viele wehren sich hier, aus meiner Sicht zu Recht, einfach < 100 als Magic Number in der Code zu klatschen. Das ist einfach einfach nur die bequeme Interpretation und Umsetzung. Die meisten Menschen koennten das ohne Kommentar auch seiner Funktion nicht wieder zuordnen ohne darüber zu grübeln.
@seppj sagte in Brauche Hilfe bei Dezimalstellen ausgabe!:
Welche andere Darstellung fallt dir bei Dezimaldarstellung ein?
- Wie ich schon sagte gibt es beliebig viele Stellen, die noch eine 0 enthalten können.
- Man kann 100 auch mit einer Ziffer schreiben: 99,9999..
- Das die Zahl in der Dezimaldarstellung sein soll, ist nicht gegeben. Man könnte z.B. als Informatiker auch behaupten: Ein int ist immer sizeof(int) * 8 Ziffern nach dem Einlesen, denn im Speicher wird er mit einer konstanten Zahl Einsen und Nullen dargestellt. Eins und Null sind beides dezimale Ziffern.
-
@rbs2 sagte in Brauche Hilfe bei Dezimalstellen ausgabe!:
@seppj Hier hast du noch viele lustige Lösungen: https://stackoverflow.com/questions/1068849/how-do-i-determine-the-number-of-digits-of-an-integer-in-c
Falsche Fragestellung. Wie viele Stellen eine Zahl hat ist eine viel schwierigere Frage als 'Hat sie weniger als X Stellen?'.
-
@seppj sowas: log10(abs(z)) < 2
für 'weniger als 3 Stellen'? :smiling_face_with_open_mouth:
-
@rbs2 sagte in Brauche Hilfe bei Dezimalstellen ausgabe!:
log10(abs(z)) < 2
für 'weniger als 3 Stellen'?Fast.
Jetzt potenzier das Ganze mal zur Basis 10
-
@dirkb sagte in Brauche Hilfe bei Dezimalstellen ausgabe!:
Jetzt potenzier das Ganze mal zur Basis 10
Warum?
-
@rbs2 sagte in Brauche Hilfe bei Dezimalstellen ausgabe!:
@dirkb sagte in Brauche Hilfe bei Dezimalstellen ausgabe!:
Jetzt potenzier das Ganze mal zur Basis 10
Warum?
Mach mal! Dann siehst du es hoffentlich. Wobei ich die Hoffnung so langsam aufgegeben habe.
-
@seppj Ich kapiere nicht was du willst. Meinst du das Vorzeichen? Das ist ja streng genommen keine Ziffer.
-
@rbs2 Du schreibst: log10(abs(z)) < 2
Auf beiden Seiten anwenden:
Und das hatten wir schon oben.PS: bei log(z) denke ich irgendwie immer, dass
-
@wob sagte in Brauche Hilfe bei Dezimalstellen ausgabe!:
∣z∣<100
Und das hatten wir schon oben.Okay, da habe ich mich von diesen ganzen Beiträgen über Nachkommastellen, Vorzeichen, und dem philosophischen Exkurs über die Fragestellung wohl ziemlich verwirren lassen.