Pages: [1]   Go Down
Author Topic: Mathem. Berechnung wird nicht korrekt durchgeführt  (Read 677 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-sad

Das ganze läuft auf einem Arduino Duemilanove.
Logged

Offline Offline
God Member
*****
Karma: 10
Posts: 721
42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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;


« Last Edit: June 11, 2011, 01:16:37 pm by Marcus W » Logged


0
Offline Offline
Full Member
***
Karma: 0
Posts: 143
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 143
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

genau 1000 * 100 > 32768

entweder als double oder "geschickter teilen"

*100/20000   == /200 oder ?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!
Logged

Offline Offline
God Member
*****
Karma: 10
Posts: 721
42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: June 11, 2011, 04:47:24 pm by Marcus W » Logged


Pages: [1]   Go Up
Jump to: