Forum: PC-Programmierung float in int


von ja k. (jaxxi)


Lesenswert?

Hi Leute!

ich habe ein Problem mit dieser zeile:

    k=(float)((delta_x/delta_y)*10);

für k,delta_x,delta_y sind integer

wenn nun delta_x=3 und delta_y=2
dann sollte doch k=15 sein da die restlichen kommastellen abgeschnitten 
werden aber bei mir ist k immer 10 aber warumm?

bzw. habt ihr einen anderen Lösungsvorschlag

von Sven P. (Gast)


Lesenswert?

ja kob schrieb:
> Hi Leute!
>
> ich habe ein Problem mit dieser zeile:
>
>     k=(float)((delta_x/delta_y)*10);
>
> für k,delta_x,delta_y sind integer
>
> wenn nun delta_x=3 und delta_y=2
> dann sollte doch k=15 sein da die restlichen kommastellen abgeschnitten
> werden aber bei mir ist k immer 10 aber warumm?
>
> bzw. habt ihr einen anderen Lösungsvorschlag

Wenn delta_x und delta_y ganzzahling sind (irgendein int oder char), 
dann wird delta_x/delta_y als Ganzzahl berechnet. Das ergibt dann '1'.

von Sven W. (svenw)


Lesenswert?

In C# könntest du das machen...
1
int delta_x = 3;
2
int delta_y = 2;
3
4
float k = (float)delta_x / delta_y * 10;

MfG Sven

von ja k. (jaxxi)


Lesenswert?

Danke!

aber was könnt ich dann machen um die 1. Komastelle in k auch noch zu 
speichern?

@Sven W. ich bin in C unterwegs! ;)

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

FAQ: Datentypen in Operationen

Du könntest alternativ auch ein C Buch lesen. Da steht das alles 
drinnen. Und noch 1000 andere Dinge, die du eigentlich wissen solltest, 
wenn du ein  C-Programm schreiben willst.

: Bearbeitet durch User
von ja k. (jaxxi)


Lesenswert?

Danke für deine hilfreiche Antwort!
;)

von DirkB (Gast)


Lesenswert?

ja kob schrieb:
> aber was könnt ich dann machen um die 1. Komastelle in k auch noch zu
> speichern?

????
Die wird doch sowieso gespeichert.

Ne, nicht ganz. float hat ca. 6. signifikante Dezimalstellen.
ab der 7. Stelle gehen dann die Informationen verloren.
Dezimalstellen, nicht Nachkommstellen 1000000000 + 1 kannst du mit float 
nicht mehr berechnen.  1000000000 +  100000000 dagegen schon.
Das gilt dann auch für 10000 + 0.00001

Also wenn du mit 10 Millionen rechnest, hast du keine sinnvollen 
Nachkommstellen mehr

von Bastler (Gast)


Lesenswert?

Das ist nicht nur c#, sonden c[#|++]?, Java, ...
1
int delta_x = 3;
2
int delta_y = 2;
3
4
float k = delta_x / (delta_y * 10.0);
Und rechnet wie gewünscht.

von Eddy C. (chrisi)


Lesenswert?

hi ja kob

wenn Du im Integer-Universum bleiben willst, rechnest Du am besten:

int k = 10 * delta_x / delta_y;

von ja k. (jaxxi)


Lesenswert?

@eddi current!
danke dies lösung hab ich jetzt auch mitlerweile gefunden aber danke!^^

von DirkB (Gast)


Lesenswert?

Bastler schrieb:
> float k = delta_x / (delta_y * 10.0);Und rechnet wie gewünscht.

das ergibt aber nicht das gleich wie

k=(float)((delta_x/delta_y)*10);

, selbst wenn alle Variablen float sind.

von Vn N. (wefwef_s)


Lesenswert?

Bastler schrieb:
> Und rechnet wie gewünscht.

Eher weniger.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.