Ergebnis 1 bis 10 von 10
  1. #1
    Mitglied
    Registriert seit
    Apr 2012
    Beiträge
    13
    Danksagungen
    0

    Standard 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!

  2. #2
    ex-Moderator Avatar von Larius
    Registriert seit
    Aug 2004
    Ort
    Österreich
    Beiträge
    5.639
    Danksagungen
    39

    Standard 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.

  3. #3
    deaktivierter Nutzer
    deaktiviertes Benutzerkonto

    Standard 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

  4. #4
    deaktivierter Nutzer
    deaktiviertes Benutzerkonto

    Standard Re: Programmiersprache C, kann man Fließkommazahlen "aufsplitten"?

    Das, was Lotterleben sagt, nur in compilierfähig.
    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;
    }
    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.

  5. #5
    Mitglied

    (Threadstarter)


    Registriert seit
    Apr 2012
    Beiträge
    13
    Danksagungen
    0

    Standard Re: Programmiersprache C, kann man Fließkommazahlen "aufsplitten"?

    Vielen Dank!
    Aber ich hätte noch eine Frage an Brother-John:
    Der Befehl
    Code:
    int vorkomma = (int)zahl;
    rundet die Zahl immer ab oder?
    Was passiert wenn ich eine Zahl wie 23423,2344 habe? Wäre diese dann nicht zu groß..?

  6. #6
    Mitglied

    (Threadstarter)


    Registriert seit
    Apr 2012
    Beiträge
    13
    Danksagungen
    0

    Standard Re: Programmiersprache C, kann man Fließkommazahlen "aufsplitten"?

    Ich hab das jetzt etwas an mein Programm angepasst:
    Code:
    int splitting(int a){
    	
    	precision = 1000;
    		int *vorkomma = &(int)a;
    		double nachkomma = &a - &vorkomma;
    	 int *wertNachKomma = round(nachkomma * precision);
      return (*vorkomma, *wertNachKomma)
    }
    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?
    Habe im Internet gelesen, dass wenn man mehrere Rückgabewerte hat, man dies mit Pointern realisieren kann..Danke im vorraus!

  7. #7
    deaktivierter Nutzer
    deaktiviertes Benutzerkonto

    Standard Re: Programmiersprache C, kann man Fließkommazahlen "aufsplitten"?

    rundet die Zahl immer ab oder?
    Auf den nächsten Integer in Richtung 0, ja.

    Was passiert wenn ich eine Zahl wie 23423,2344 habe?
    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.

    Habe im Internet gelesen, dass wenn man mehrere Rückgabewerte hat, man dies mit Pointern realisieren kann
    Dann setz es doch auch so um. Dein Code wird so nicht compilieren.

    Mit Pointern, im Prinzip:
    Code:
    void splitting (double inputNumber, int *outputNumber, int *outputDecimals) {
      *outputNumber = berechneterVorkommaTeil;
      *outputDecimals = berechneterNachkommaTeil;
    }
    Oder mit nem struct:
    Code:
    struct tuple {
      int number;
      int decimals;
    }
    tuple splitting (int inputNumber) {
      tuple result;
      tuple.number = berechneterVorkommaTeil;
      tuple.decumals = berechneterNachkommaTeil;
      return result;
    }
    Ungetestet und keine Garantie, dass mir nicht was C++-spezifisches reingerutscht ist.

  8. #8
    Mitglied

    (Threadstarter)


    Registriert seit
    Apr 2012
    Beiträge
    13
    Danksagungen
    0

    Standard 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
    Code:
    return(*pointer1,*pointer2);
    an, damit ich diese in der nächsten Methode benutzen kann?Und ich verwende dann genau diese beiden Zeigernamen wieder oder?

  9. #9
    Mitglied Avatar von flooooorian
    Registriert seit
    Feb 2008
    Beiträge
    987
    Danksagungen
    5

    Standard 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.

  10. #10
    deaktivierter Nutzer
    deaktiviertes Benutzerkonto

    Standard 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:
    Code:
    int vorkomma = 0;
    int nachkomma = 0;
    splitting(23.42, &vorkomma, &nachkomma);
    Wenn dich das Ganze * und & verwirrt, das hier erklärt das sehr nett: http://www.youtube.com/watch?v=Rxvv9krECNw

  11.  
     
     

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •