Wie kann man in C bei einem Wert die Kommastellen entfernen?
Es soll nicht gerundet werden. Sondern die Nachkommastelle soll einfach verschwinden.
4,3 -> 4
Du bist in Begriff, Forum64 zu verlassen, um auf die folgende Adresse weitergeleitet zu werden:
Bitte beachte, dass wir für den Inhalt der Zielseite nicht verantwortlich sind und unsere Datenschutzbestimmungen dort keine Anwendung finden.
letzter Beitrag von lvr am
Wie kann man in C bei einem Wert die Kommastellen entfernen?
Es soll nicht gerundet werden. Sondern die Nachkommastelle soll einfach verschwinden.
4,3 -> 4
Auf einen int Typ casten schneidet nicht einfach ab?
Auf einen int Typ casten schneidet nicht einfach ab?
Doch, genau so einfach ist das
Und wenn man nicht casten will, dann gibt es bei double floor, bei float floorf ....
na wenn das so einfach ist. Danke!
Ein beliebter Stolperstein bei solchen Fällen: Was soll bei negativen Werten geschehen? "Nachkommazahlen wegschneiden" rundet Richtung Null, d.h. positive Zahlen werden kleiner, negative aber größer. Je nach Anwendungszweck will man aber evtl. immer abwärts runden.
Wieso runden? ich dachte mit int werden die Nachkomme ohne Runden weggeschnitten.
ist das dann doch etwa nicht das was ich suche?
Wieso runden? ich dachte mit int werden die Nachkomme ohne Runden weggeschnitten.
ist das dann doch etwa nicht das was ich suche?
Doch das ist das was du suchst .
float f=123.56;
int x = f;
x wird dann 123.
Edit: Bei
float f = -0.87;
int x = f;
wird x 0.
;).
Doch, das passt schon. Nachkommastellen abschneiden ist eine Form des Rundens. Das, was Du unter "runden" verstehst, ist "kaufmännisches Runden". Insofern ist der cast auf int vermutlich genau das, was Du willst. Wenn Du auch negative Zahlen verarbeitest, solltest Du aber testen, ob da auch das passiert, was Du willst.
Man findet immer wieder viele Grafikanwendungen (auf Hobbyebene) in denen das passiert und Pixel mit X=0 z.B. überhäufig sind weil deren Bereich von -0.99 bis 0.99 reicht bei dieser Art Runden.
edit: Lies: mir ist das natürlich mal passiert
Also für mich war der Begriff "runden" immer der, so wie man es auch damals in der Schule gelernt hat:
Alles bis zur Zahl vier wird abgerundet. Und drüber wird aufgerundet.
55,4 -> 55
55,5 -> 56
Von "kaufmänischen Runden" war damals meines Wissens noch keine rede.
(int)(zahl + 0.5) ?
(int)(zahl + 0.5) ?
Verstehe zwar nicht ganz, warum korrektes runden diskutiert wird, wenn der OP nur Nachkommastellen abschneiden wollte, aber wenn wir schon dabei sind
- für positive Zahlen ist das kaufmännisches Runden
- für negative Zahlen ist es broken
Wenn wir dann korrekt runden wollen:
//Klugscheissmodus an
i = (int)( f + (-(f<0)*2+1)*0.5 );
//Klugscheissmodus aus
Sind mir zu viele arithmetische Operationen, nur dafür, das möglichst tricky aussehen zu lassen :p
i = (int) (f + ( f<0 ? -.5 : .5 ) );
wäre die meiner Meinung nach einfachste Variante.
Da aber alles Kontanten sind: Gut möglich, dass ein vernünftiger Optimizer den gleichen Code generiert
Irgendwie dürfte mein Vorhaben nicht so ganz funktionieren.
Wenn ich jetzt einen int-Wert durch 4 dividiere:
Und dann mittels Schleife abfrage:
dann funktioniert das nicht.
Der Wert entspricht nicht einer Zahl zwischen 1 und -1
Woran kann das liegen?
Kann es seind as im Hintergrund immer noch mit Kommastellen gerechnet wird?
ich weiß nicht, was du vorhast, aber 0/4 ist immer noch 0 ... (und "if" ist auch keine Schleife...)
[edit]: Erklär mal, was du erreichen willst
0/4 ist null, ja aber 0,5/4 ist nicht null.
Wo ist denn bei Dir die 0,5? In Deinem Quellcode sehe ich die nicht...
ein int16_t kann kein 0,5 beinhalten. Bitte poste den kompletten Code und/oder erkläre, was genau du erreichen willst