hilfdirselbst.ch
Facebook Twitter gamper-media
simi
Beiträge: 18
3. Jul 2003, 11:54
Beitrag #1 von 7
Bewertung:
(1185 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

nochmal kleines problem mit rechenformel


wahrscheinlich denke ich zu kompliziert:
habe nun das script für die ersetzung des punktes in ein komma eingefügt. das funktioniert auch wunderbar.

was noch komisch ist ist, dass wenn gar nix in den feldern 03 und 04 steht, rechnet director trotzdem was und schreibt diesen wert ins "pointtext"-feld.
wie kann ich sagen, dass, wenn diese beiden felder leer sind, zb: 0,0 im "pointtext"-feld steht? oder dass er nichts rechnen soll?

meine eingabefelder heißen feld03 und feld04.
der button hat folgedes scipt:
----------------------------------------------------------------------
on mouseUp me
ergebnis = float(member("feld03").text/60)+ (float(member("feld04").text/9))
ergebnis02 = float(member("feld03").text/60)
ergebnis03 = float(member("feld04").text/9)
member("pointtext").text=string(ergebnis)
myStrg = string(ergebnis)
myCt = the number of chars in myStrg - 1
put "," into myStrg.char[myCt]
put myStrg into member "pointtext"



if member("feld04").text= "" then
member("feld04").text= "0"
member("pointtext").text= string(ergebnis02)
myStrg = string(ergebnis02)
myCt = the number of chars in myStrg - 1
put "," into myStrg.char[myCt]
put myStrg into member "pointtext"
end if


if member("feld03").text= "" then
member("feld03").text= "0"
member("pointtext").text= string(ergebnis03)
myStrg = string(ergebnis03)
myCt = the number of chars in myStrg - 1
put "," into myStrg.char[myCt]
put myStrg into member "pointtext"
end if
go to frame "portion"

end
------------------------------------------------------

weiss jemand rat?

danke

gruß simone Top
 
X
donkey shot
Beiträge: 1416
6. Jul 2003, 18:40
Beitrag #2 von 7
Beitrag ID: #42682
Bewertung:
(1185 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

nochmal kleines problem mit rechenformel


Mit dem Befehl floatP(expression) kannst Du überprüfen, ob es sich bei einem eingegebenen Text um eine Zahl mit Komma (aber auch ganze Zahlen werden akzeptiert) handelt. Das folgende Beispielskript (als Verhalten für einen Textdarsteller) überprüft beim drücken der Entertaste, ob der eingegebene Text eine Zahl ist:

on beginSprite me
sprite(the spriteNum of me).editable = TRUE
the floatPrecision = 1
end beginSprite

on keyUp me
if the key = RETURN then
myText = sprite(the spriteNum of me).member.text
delete the last char of myText
if floatP(float(myText)) = 0 then
put "nochmal!" into the member of sprite(the spriteNum of me)
else
put float(myText) into the member of sprite(the spriteNum of me)
end if
else
nothing
end if
end keyUp

Hoffe, Du kannst damit was anfangen und es nach Bedarf umbauen.

grüsse

Christof
als Antwort auf: [#42329] Top
 
donkey shot
Beiträge: 1416
6. Jul 2003, 18:43
Beitrag #3 von 7
Beitrag ID: #42683
Bewertung:
(1185 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

nochmal kleines problem mit rechenformel


Ach und zwei Dinge noch zur Erklärung:

Wenn Du mit floatP() etwas überprüfst, wird entweder 0 für FALSE oder 1 für TRUE ausgegeben.

Deinen eingegebenen Text mußt Du übrigens mit float(eingabetext) von einem String in eine Fließkommazahl umwandeln, sonst klappt es nicht.

grüsse

Christof
als Antwort auf: [#42329] Top
 
simi
Beiträge: 18
9. Jul 2003, 12:50
Beitrag #4 von 7
Beitrag ID: #43123
Bewertung:
(1185 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

nochmal kleines problem mit rechenformel


hallo christof,
diese rechenformel macht mich noch wahnsinnig! -und dich wahrscheinlich auch ;)
du hast geschrieben, dass man mit floatP(expression) überprüfen kann, ob es sich bei dem eingegebenen text um eine zahl mit komma handelt.

ich glaub ich schnall das nicht!
also ich habe noch ein weiteres problemchen gefunden:
nochmal mein script:

--------------------------------------------------
on mouseUp me
ergebnis = float(member("feld01").text * 10000) / (float(member("feld02").text) * float(member("feld02").text))
member("amount").text= "Your BMI amounts to"
member("ausgabe02").text=string(ergebnis)
myStrg = string(ergebnis)
myCt = the number of chars in myStrg - 1
put "," into myStrg.char[myCt]
put myStrg into member "ausgabe02"

if ergebnis> "1" then
member("info").text= "bla bla."
end if
end

----------------------------------------------------

also das ergebnis wird nun als kommazahl dargestellt.

jetzt hab ich aber bemerkt (etwas spät), dass,wenn man mit einer kommazahl rechnen will z.b. 55,5 (die ich ins feld01 eintippe)dann rechnet director irgenwas komisches. tippe ich aber 55.5 ein klappt alles.

ich glaube ich hab deine geduldigen erkärungen nicht ganz begriffen.

deshalb nochmal eine dumme frage von mir: wie rechnet director richtig auch mit den von mir eingegebenen kommazahlen. ich denke ich könnte die antwort in deinen mails nachlesen und kombinieren, aber ich bin inzwischen selbst zum kombinieren zu doof :(
das mit float() und floatP() ist mir noch unklar. und auch wie du schreibst:
"Deinen eingegebenen Text mußt Du übrigens mit float(eingabetext) von einem String in eine Fließkommazahl umwandeln, sonst klappt es nicht. "
das blick ich nicht!!!

danke im vorraus

gruß simone
als Antwort auf: [#42329] Top
 
donkey shot
Beiträge: 1416
10. Jul 2003, 16:07
Beitrag #5 von 7
Beitrag ID: #43315
Bewertung:
(1185 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

nochmal kleines problem mit rechenformel


Hallo Simone,

Zum ersten:

>>das mit float() und floatP() ist mir noch unklar...

Director unterscheidet zwischen einfachen Zeichenketten (Strings), Fließkommazahlen (float) und ganzen Zahlen (integer). Strings werden in Anführungen an- bzw. ausgegeben. ZB.:

myString = "Dies ist ein Satz"

Zahlen ohne Anführungen. Z.B.:

myNmb = 1
myNmb = 1.54354534

Zahlen können natürlich auch Strings sein. ZB.:

myNmb = "1"

Man kann aber auch Strings in Zahlen oder Zahlen in Strings umwandeln mit string(), float() oder integer().

Wenn man überprüfen will, ob ein Wert ein String, eine Fließkommazahl oder ein ganze Zahl ist, geht das mit den Befehlen stringP(), floatP() oder integerP().

Wenn ich ein Zeichen in einer Zahl, austauschen will (Punkt oder Komma zB.), dann muß ich diese in einen String umwandeln, selbige aber von einem String in eine Fließkommazahl umformatieren, wenn ich damit rechnen will (wobei Director letzteres auch automatisch macht).

So und nun zum eigentlichen Problem:

Das Skript sollte es tun (habe es diesmal ein wenig kommentiert):

on beginSprite me
the floatPrecision = 1
put EMPTY into member "feld01"
put EMPTY into member "feld02"
put EMPTY into member "ausgabe02"
end beginSprite

on mouseUp me

myText1 = member("feld01").text

-- es folgt eine Abfrage, ob die Eingabe ein Komma enthält

if myText1 contains "," then


-- die folgenden 5 Zeilen wandeln das Komma zum Rechnen in einen Punkt um

repeat with n = 1 to the number of chars in myText1
if char n of myText1 = "," then
put "." into myText1.char[n]
end if
end repeat
else
nothing
end if

-- das ganze nochmal für Feld zwei

myText2 = member("feld02").text

if myText2 contains "," then
repeat with n = 1 to the number of chars in myText1
if char n of myText2 = "," then
put "." into myText2.char[n]
end if
end repeat
else
nothing
end if


-- wenn einer der Werte keine Zahl ist wird eine Warnung ausgegeben

if floatP(float(myText1)) = 0 then
put EMPTY into member "feld01"
alert "Ungültiger numerischer Wert!"
else

var1 = float(myText1)

if floatP(float(myText2)) = 0 then
put EMPTY into member "feld02"
alert "Ungültiger numerischer Wert!"
else
var2 = float(myText2)

-- nun kommt die eigentliche Rechnung, wenn die Werte OK sind

ergebnis = (var1 * 10000) / (var2 * var2)

-- nu wird der Punkt wieder in ein Komma umgewandelt

myStrg = string(ergebnis)
myCt = the number of chars in myStrg - 1
put "," into myStrg.char[myCt]

-- und der Text ausgegeben

put "Your BMI amounts to" && myStrg into member "ausgabe02"

end if

end if

-- hier kommen dann die Abfragen für das Infofeld rein

end mouseUp


Und nun zum Thema Geduld und dumme Fragen:

Habe jahrelang Computerkurse gegeben - unter anderem Computereinführungskurse - da entwickelt man zwangsläufig die Geduld eines Hühnengrabes. Außerdem habe ich etwa eine Stunde täglich für dieses Forum reserviert (dieses Problem hat mich eine halbe Stunde gekostet, also habe ich noch eine halbe für mich :)).

Aber das hier ist ja auch wirklich ein recht komplexes Skript für eine einfache Rechenformel. Wenn man viel programmiert muß man aber einfach feststellen, das man die meiste Zeit in solch lästige Hin- und Herkonvertierereien und Abfragen für jeden erdenklichen Fall stecken muß. Sei froh, daß Du keine Datumsberechnungen/-formatierungen mit JavaScript machen mußt oder so. Da ist Lingo wirklich schon komfortabel... ;)

greez cb
als Antwort auf: [#42329] Top
 
simi
Beiträge: 18
11. Jul 2003, 10:45
Beitrag #6 von 7
Beitrag ID: #43384
Bewertung:
(1185 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

nochmal kleines problem mit rechenformel


vielen vielen dank,

jetzt ist das ganz logisch :)
hatte wohl ein äußerst dickes brett vor dem kopf.

nochmal danke für deine mühen.

grüße
simone
als Antwort auf: [#42329] Top
 
donkey shot
Beiträge: 1416
12. Jul 2003, 02:54
Beitrag #7 von 7
Beitrag ID: #43465
Bewertung:
(1185 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

nochmal kleines problem mit rechenformel


Ja, ja. Die Bretter vorm Kopf. Die kenn ich. Hilft meistens nur Problem ignorieren und zwei Tage später nochmal angehen - wenns geht.

Manchmal versteh ich auch meine eigenen Skripts nicht mehr. Dann geht neuprogrammieren manchmal schneller... ;)

grüsse,

Christof
als Antwort auf: [#42329] Top
 
X