-
12. 05. 2012, 21:46 #1Mitglied
- Registriert seit
- Apr 2012
- Beiträge
- 13
- Danksagungen
- 0
Programmiersprache C, kann man Fließkommazahlen "aufsplitten"?
Hallo!
Ich möchte eine Fließkommazahl, z.b. 13,14 aufsplitten in
x = 13
und y = 14
Weiß jemand wie das geht? Habe nach längerer Suche leider nichts brauchbares im Internet gefunden..
Danke im vorraus!
-
12. 05. 2012, 22:15 #2MC (Ban)-Hämmerlein
Moderator
- Registriert seit
- Aug 2004
- Ort
- Österreich
- Beiträge
- 5.516
- Danksagungen
- 6
Re: Programmiersprache C, kann man Fließkommazahlen "aufsplitten"?
Du könntest das Ganze in ein Char Array umwandeln und dann mit den String-Funktionen arbeiten. Da gibt es nämlich Funktionen die dir einen Substring bis zu einem gewissen Token bilden.
-
12. 05. 2012, 22:40 #3Lotterlebendeaktiviertes Benutzerkonto
Re: Programmiersprache C, kann man Fließkommazahlen "aufsplitten"?
Vielleicht sowas. Weiss nicht, ob dies richtig ist und ob es sich kompilieren lässt. Vermutlich gibt es auch elegantere Lösungen:
Code:#include <math.h> double zahl=13,1487; x=floor(zahl); y=floor(100*floor(zahl-x)); # mal 100 um nur die ersten beiden Nachkommastellen zu erhalten
-
12. 05. 2012, 23:16 #4
Re: Programmiersprache C, kann man Fließkommazahlen "aufsplitten"?
Das, was Lotterleben sagt, nur in compilierfähig.

Je nachdem, was du mit dem Splitergebnis machen willst, kann auch in String umwandeln und dann splitten sinnvoll sein. Das tipp ich jetzt aber nicht. C-Strings sind zu ekelhaft.Code:#include <stdio.h> #include <math.h> const int genauigkeit = 100000; // Anzahl Nullen = Anzahl Nachkommastellen int main(void) { double zahl = 12.34567; int vorkomma = (int)zahl; double nachkomma = zahl - vorkomma; int nachkommaAlsInt = round(nachkomma * genauigkeit); printf("Vorkomma: %d, Nachkomma: %f, als int: %d\n", vorkomma, nachkomma, nachkommaAlsInt); // Ausgabe: "Vorkomma: 12, Nachkomma: 0.345670, als int: 34567" return 0; }
-
13. 05. 2012, 08:51 #5Mitglied
(Threadstarter)
- Registriert seit
- Apr 2012
- Beiträge
- 13
- Danksagungen
- 0
Re: Programmiersprache C, kann man Fließkommazahlen "aufsplitten"?
Vielen Dank!
Aber ich hätte noch eine Frage an Brother-John:
Der Befehlrundet die Zahl immer ab oder?Code:int vorkomma = (int)zahl;
Was passiert wenn ich eine Zahl wie 23423,2344 habe? Wäre diese dann nicht zu groß..?
-
13. 05. 2012, 09:50 #6Mitglied
(Threadstarter)
- Registriert seit
- Apr 2012
- Beiträge
- 13
- Danksagungen
- 0
Re: Programmiersprache C, kann man Fließkommazahlen "aufsplitten"?
Ich hab das jetzt etwas an mein Programm angepasst:
Nun noch eine Frage: Mit den Werten vorkomma und wertNachkomma will ich in einer anderen Methode weiterrechnen, ist das also richtig so wie ich das geschrieben habe?Code:int splitting(int a){ precision = 1000; int *vorkomma = &(int)a; double nachkomma = &a - &vorkomma; int *wertNachKomma = round(nachkomma * precision); return (*vorkomma, *wertNachKomma) }
Habe im Internet gelesen, dass wenn man mehrere Rückgabewerte hat, man dies mit Pointern realisieren kann..Danke im vorraus!
-
13. 05. 2012, 10:25 #7
Re: Programmiersprache C, kann man Fließkommazahlen "aufsplitten"?
Auf den nächsten Integer in Richtung 0, ja.rundet die Zahl immer ab oder?
Nichts Bemerkenswertes. Wie groß ein int ist, ist plattformabhängig. Meistens sind’s 32bit, was dir einen Wertebereich von ca. -2 Mrd bis +2 Mrd gibt.Was passiert wenn ich eine Zahl wie 23423,2344 habe?
Dann setz es doch auch so um. Dein Code wird so nicht compilieren.Habe im Internet gelesen, dass wenn man mehrere Rückgabewerte hat, man dies mit Pointern realisieren kann
Mit Pointern, im Prinzip:
Oder mit nem struct:Code:void splitting (double inputNumber, int *outputNumber, int *outputDecimals) { *outputNumber = berechneterVorkommaTeil; *outputDecimals = berechneterNachkommaTeil; }
Ungetestet und keine Garantie, dass mir nicht was C++-spezifisches reingerutscht ist.Code:struct tuple { int number; int decimals; } tuple splitting (int inputNumber) { tuple result; tuple.number = berechneterVorkommaTeil; tuple.decumals = berechneterNachkommaTeil; return result; }
-
13. 05. 2012, 11:31 #8Mitglied
(Threadstarter)
- Registriert seit
- Apr 2012
- Beiträge
- 13
- Danksagungen
- 0
Re: Programmiersprache C, kann man Fließkommazahlen "aufsplitten"?
Wieso schreibst du bei deinem ersten Code "void splitting"? Das heißt ja, dass es nichts zurückgibt, aber es solen ja die Vor-und Nachkommastellen zurückgegeben werden. Und hänge ich am Ende dann einfach ein
an, damit ich diese in der nächsten Methode benutzen kann?Und ich verwende dann genau diese beiden Zeigernamen wieder oder?Code:return(*pointer1,*pointer2);
-
13. 05. 2012, 12:07 #9Mitglied
- Registriert seit
- Feb 2008
- Beiträge
- 908
- Danksagungen
- 0
Re: Programmiersprache C, kann man Fließkommazahlen "aufsplitten"?
Die Rückgabe passiert hier doch über die Pointer im Argument der Funktion, das void ist dann schon okay. Das was du da vorhast geht nicht. Befass dich lieber erstmal mit den Grundlagen über Funktionen und Pointer und sowas, damit das was du machen willst auf einem stabilen Fundament steht.
-
13. 05. 2012, 12:46 #10
Re: Programmiersprache C, kann man Fließkommazahlen "aufsplitten"?
Teste deinen Code doch bitte, bevor du neue Fragen stellst! return(*pointer1,*pointer2); ist keine gültige C-Syntax, das würde dir der Compiler auch sofort sagen! Ja, Compiler-Fehlermeldungen sind fürs ungeübte Auge i.d.R. beschissen kryptisch. Hilft aber nix, du musst damit umgehen können, um auch nur ansatzweise sinnvoll Software zu schreiben.
Zu dem void, siehe flooooorian. Deswegen hab ich die Parameter ja extra mit input und output gepräfixt. Verwendung dann so:
Wenn dich das Ganze * und & verwirrt, das hier erklärt das sehr nett: http://www.youtube.com/watch?v=Rxvv9krECNwCode:int vorkomma = 0; int nachkomma = 0; splitting(23.42, &vorkomma, &nachkomma);
-


Zitieren
mehr lesen...







Graham Cluley: Neues...
Heute, 18:09 in gulli:news