int in float

Hi ich progge noch net so lang in cpp und wollt mal fragen, ob man wenn ich zwei int's habe mit sagen wir mal: int a= -1, b= 56; habe. Kann man das irgent wie bitweise verschieben oder was weis ich um nen float c= -1.56; rauszubekommen? Wenn ja wie mach ich das bitte? Gruß Gawin

Vielleicht so:

float c;
if (a < 0) c = a + b / -100.0; else c = a + b / 100.0;

Gruß, mmi

leider nicht zahlen werden ausgelesen und ändern sich a ist manchmal auch 0 so wie b auch zwischen 0 und 900 schwankt

edit: und ich zu früh geantwortet ;)

Hab's oben geändert - b wird aber nie negativ? Ansonsten halt entsprechend anpassen.

wenn ich aber einfach nur durch 100.0 nehm wenn a=0 ist und b=5 würde aber 0.05 rauskommen was ja nicht stimmt

Gawin: wenn ich aber einfach nur durch 100.0 nehm wenn a=0 ist und b=5 würde aber 0.05 rauskommen was ja nicht stimmt

Was erwartest du statt dessen? Und woher kommen denn die Werte?

sth77: Was erwartest du statt dessen? Und woher kommen denn die Werte?

lies dir den ersten post dann weiste was ich erwarte und woher von nem sensor den ich per iic auslesen und die vorkomma/nachkomma-zahlen in verschiedenen registern liegen

Ich lese aber aus dem ersten Post, dass in dem Fall für a=0 und b=5 eben c=0,05 rauskommen soll. Daher meine Frage, was deiner Meinung nach die richtige Lösung sei. Vielleicht stelle ich mich nur gerade zu blöd an... ;)

wenn a die vorkommastelle und b die nachkommastelle kommt bei mir a=0 b=5 c=0.5 raus und nicht 0.05 xD ich hab nie was von teilen geschrieben oder?

OK, dann definiere bitte erstmal den Wertebereich den a und b annehmen können. Davon hängt dann nämlich die Umrechnungsformel ab. Dein Problem ist ein mathematisches, kein C++ Problem.

Wenn b auch 900 sein kann und a = 1, soll vermutlich 1,9 rauskommen oder? dann wäre aber das Ergebnis bei b= 90 und a=1 -> 1,09 und bei b=9 und a=1 -> 1,009

Mario.

Gawin:
wenn a die vorkommastelle und b die nachkommastelle kommt bei mir a=0 b=5 c=0.5 raus und nicht 0.05 xD
ich hab nie was von teilen geschrieben oder?

Ok und worin unterscheiden sich dann
a=0 und b=5, was ja 0.5 ergeben soll
und a=0 und b=50, was ja dann auch 0.5 ergeben soll?

Du hast nichts vom Teilen geschrieben, das ist richtig. Aber das eine Beispiel ist eben nicht eindeutig. Wenn du sagst, dass b zwischen 0 und 900 schwankt, fragt man sich schnell, wo der Unterschied zwischen b=9 und b=90 und b=900 besteht. Deinen jetzt nachgeschobenen Informationen nach ist das jeweils das gleiche. Prinzipiell fürde ich es auch so machen, wie es zuvor beschrieben ist, mathematisch gesehen führt aus meiner Sicht kein Weg an der Division vorbei. Wenn b nun 5 ist, muss man eben durch 10 dividieren, bei dreistelligen Zahlen logischerweise durch 1000. Du musst also den Quotienten in Abhängigkeit von b ermitteln, mit zwei oder 3 if-Anweisungen ist das ja schnell gemacht.

[edit] Zweiter. Da war einer schneller, der das Problem genauso sieht... ;)

nix rechnen 2 klasse man meine 7 jährige nicht kapiert vorkommastellen und nachkommastellen nix rechnen zusammenfügen xDDD meine güte was is daran nicht zu kapieren? a=1,b=9 = c = 1.9 a=1,b=90 = c = 1.90 // null wird gestrichen also 1.9 a=1,b=91 = c = 1.91

jetzt alles klar???

float f = (float) b;
while( f > 1.0) f = f / 10;
f = (float)a + f;

Wie immer ohne Gewähr.

Da bleibt auch die Frage, ob man es nicht beim Einlesen der Daten schon vereinfachen kann.

nochmal b schwankt zwischen einer 1 und einer 3 stelligen zahl da bringt ein fester teiler wie 10 refcht wenig oder wie meinst du das? xDD also wirklich wenn ich 834/10 mach kommt doch 8.34 raus wo aber 0.834 rauskommen muss xD

Hat jemand was von 2. Klasse geschrieben? :astonished:

@mkl0815: Sieht schon sehr gut aus. Ist vermutlich die eleganteste Lösung.

Gawin: nochmal b schwankt zwischen einer 1 und einer 3 stelligen zahl da bringt ein fester teiler wie 10 refcht wenig oder wie meinst du das? xDD also wirklich wenn ich 834/10 mach kommt doch 8.34 raus wo aber 0.834 rauskommen muss xD

Du musst drauf achten, dass dort eine while-Anweisung steht, keine if. Er teilt also solange den Wert durch 10, bis die Zahl kleiner 1 ist. Das sollte so passen. Also teilt er deine ermittelten 8,34 nochmal durch 10 und erhält 0,834, die dann zu a addiert werden.

ja meine nichte 7 jahre is in der zweite klasse und lehrnt gerade was kommazahlen sind also auch was eine vorkommastell und was eine nachkommastelle ist xD

aber nen festerteiler bringt mir ja nix wäre es so einfach hätte ich die lösung schon längst ;)

Niemand hat behauptet, dass Zweitklässler Nachkommastellen beherrschen. (Ich gebe selbst Mathematik-Nachhilfe...) Der mtl0815-Trick ist doch, dass mehrfach durch 10 geteilt wird. Probier es einfach mal aus. ;)

ach natürlich hab das while nich bedacht ja dann gehts aber dachte mehr an ne elegante formel oder so^^ aber hier schreiben alle auch so schnell und durcheinander das ich net alles mitbekommen hab xD