überprüfen ob float kommastellen hat



  • -.-
    Ich bin recht neu mit C unterwegs und habe leider dazu nichts mit der suchen funktion gefunden (wird wahrscheinlich zu einfach sein das das jemand frägt :D) aber wie kann ich überprüfen ob eine float kommastellen hat (bzw ob etwas anderes drin steht als 0 bei den kommastellen).

    mfg Marco



  • So einfach geht das nicht, float und double rechnen nur mit Näherungswerten,
    daher kann eine 2.0 auch 1,9997 oder so sein, du kannst also nie mit exakten
    ganzen Zahlen rechen bzw. davon ausgehen es wären welche.
    Deswegen wurde diese Frage wohl noch nie gestellt.



  • Testen kann man so:

    if( d == (long)d )
      //keine nachkommastellen
    

    Allerdings ist das, wie SirLant schon gesagt hat nicht sicher.

    Meistens verwendet man deswegen näherungswerte. dh statt
    if(d==1)
    schreibst du
    if(d>0.99 && d<1.01)

    oder ähnliches.



  • -.-
    naja mein problem is folgendes ich habe eine kommazahl und möchte die schreiben wie wenn sie ein bruch wäre 😉
    also z.b. 1,5 = 3/2



  • Verwende doch folgendes:

    struct bruch {
      int zaehler;
      int nenner;
    };
    

    Ist zwar nicht mehr ganz einfach zu rechnen, aber es geht.
    Das Ergebnis in Dezimal erhälst du ja durch decimal = zaehler/nenner;



  • void dezimalToFraction (double dezimal)
    {
      if (dezimal == (long)dezimal) {// thx to "Shade Of Mine" for code i copied 1:1
        //no coma steads
        printf("no comma: %i\n",(int)dezimal);
      } else {
        int nummerator, denominator = 2;
        while ((denominator * dezimal) != (long)(dezimal * denominator))
          denominator++;
        nummerator = denominator * dezimal;
        printf("Fraction: %i/%i\n",nummerator, denominator);
      }
    }
    

    also ich hab das jetzt so gemacht und es funktioniert eigendlich ganz gut 🙂



  • Wirklich eine Zahl ohne Kommastellen zu haben ist ziemlich gering, daher solltest
    du noch ne Toleranz einbauen, weil es wirklich oft vorkommt, dass ne 2.0 als
    1.99999 angezeigt wird.



  • void dezimalToFraction (double dezimal)
    {
      if (dezimal == (long)dezimal) {// thx to "Shade Of Mine" for code i copied 1:1
        //no coma steads
        printf("no comma: %i\n",(int)dezimal);
      } else {
        int nummerator, denominator = 2;
        while ((denominator * dezimal + 0.01) > (long)(dezimal * denominator) &&
               (denominator * dezimal - 0.01) > (long)(dezimal * denominator))
          denominator++;
        nummerator = denominator * dezimal;
        printf("Fraction: %i/%i\n",nummerator, denominator);
      }
    }
    

    ok jetzt hab ich das so und es funktioniert wirklich besser 🙂
    Bei meinem vorigen code hat es 2.2 nicht als 11/5 angezeigt da sich ganz hinten nochmal ne zahl eingeschlichen hatte

    thx
    mfg Marco


Anmelden zum Antworten