Go Down

Topic: Mathem. Berechnung wird nicht korrekt durchgeführt (Read 753 times) previous topic - next topic

eashtern

Hallo,

ich habe ein Problem, und ich komme einfach nicht auf die Lösung.

Ich habe die Werte

int number1;
int maximum;
int percentage;

number1 hat nun den Wert 200, maximum den Wert 20000. Daraus soll nun der Prozentsatz berechnet werden, also percentage = (number1/maximum)*100.

Allerdings kommt dort nie etwas anderes als 0, 1 oder -1 raus. Wenn ich percentage als double oder float definiere, dann komt immer 0.00 raus.

Ich werd noch verrückt  :(

Das ganze läuft auf einem Arduino Duemilanove.

Marcus W

#1
Jun 11, 2011, 08:14 pm Last Edit: Jun 11, 2011, 08:16 pm by Marcus W Reason: 1
versuch mal alle als double zu deklarieren, damit müsste es gehen.

EDIT:
Und eine percentager immer als Double und anschließender Multiplikation. Also bei 25% eben Wert * 0.25;



jkw

naja ein int/int mit dem Ergebniss <1 ist 0 --- mal ("*") -egal was auch immer du das nimmst- bleibt 0
mach mal number1*100/maximum

Gruß JKW

eashtern

Danke, allerdings gibt es immer noch Probleme:

Beispiel:

number1 = 1000;

number1 * 100 ergibt 31072.00 ???
und das obige "Ergebnis2 ergibt dann bei Teilung durch 20000 -1.55

Kann der Arduino diese Zahlen vielleicht nicht händeln?

mfg, Dominic

jkw

genau 1000 * 100 > 32768

entweder als double oder "geschickter teilen"

*100/20000   == /200 oder ?

eashtern

Hi,
habe es hinbekommen, scheinbar waren die Zahlen zu groß, sodass dort nichts rauskommen konnte.

Anstatt das ich den Dividenden mit 100 multipliziere, teile ich den Divisor einfach durch 100. Kommt aufs selbe ruas, und die Zahlen sind nicht mehr so groß. Es klappt auch wunderbar.

Danke für die Hilfe!

Marcus W

#6
Jun 11, 2011, 11:45 pm Last Edit: Jun 11, 2011, 11:47 pm by Marcus W Reason: 1
Schau dir mal Datentypen im Allgemeinen an.
Es liegt nicht am Arduino, dass ein Integer ein Integer ist. Ein Integer hat im Normalfall 16 Bit, was einen Wertebereich von 65535 verschiedenen Werten ermöglicht.

Wenn du größeren Wertebereiche benötigst, sollstest du einen anderen Datentyp wählen.

EDIT:
http://de.wikipedia.org/wiki/Integer_(Datentyp)#Maximaler_Wertebereich_von_Integer

Go Up