ü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 hattethx
mfg Marco