Go Down

Topic: Typumwandlung? (Read 2802 times) previous topic - next topic

walking

Hi,

ich habe hier folgenden Code der mich etwas rätseln lässt
Quote
long freq;
 long hilf;
 long poti_wert;

 poti_wert=analogRead(1);
 hilf= (1 / poti_wert) ;
 freq=(hilf*1000000);


Der Wert der von analogRead liegt immer zwischen 0 und 1023 das weiß ich. Mein Problem ist, dass "hilf" immer 0 ist wenn ich es mir ausgeben lasse. Warum? Müsste nicht eigt. die Nachkommastelle(n) abgeschniten werden?

Falls dem nicht so ist, wie bekomm ich das hin? Sitzt schons eit geraumer Zeit davor und bekomms nicht hin. Typumwandlung hab ich schon gegoogelt und entweder gehts damit nicht oder ich habs falsch gemacht(das ist wohl eher der Fall xD)

Joghurt

#1
Sep 16, 2010, 04:07 pm Last Edit: Sep 16, 2010, 04:10 pm by Joghurt Reason: 1
Mit
Code: [Select]
hilf= (1 / poti_wert) ;
ist hilf immer kleiner als "1", und da hilf eine Ganzzahlenvariable ist (und damit, wie Du richtig bemerkt hast, die Nachkommastellen abgeschnitten werden) immer "0".

Zwischen welchen beiden Werten soll sich Dein Wert für freq bewegen? Und in welcher Schrittweite?

walking

Oh klar stimmt.

Wird dann in der nächsten Zeile von der double-Zahl die Nachkommastellen abgeschnitten wenn ich für "freq" long habe?

Wie muss ich denn die Typumwandlung korrekterweise schreiben?
So hab ichs bisher gehabt:

freq=((long)(hilf*1000000));

Joghurt

...ist die Frage, was genau Du haben willst?

walking

Am liebsten den Wert für freq möglichst genau, sprich gerundet nicht abgeschnitten als ganzzahligen Wert.

Joghurt

#5
Sep 16, 2010, 04:25 pm Last Edit: Sep 16, 2010, 04:27 pm by Joghurt Reason: 1
Code: [Select]
double hilf;
[...]
freq = (long)(hilf*1000000+.5);

:)


PS: Falls das so immer noch nicht klappt probier mal statt "1/poti_wert" "1.0/poti_wert"...

walking

Doch jetzt gehts.

Super Danke :)

Joghurt

#7
Sep 16, 2010, 04:38 pm Last Edit: Sep 16, 2010, 04:38 pm by Joghurt Reason: 1
Kein Problem. ;)

Go Up