Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Skripter •->

Anmeldedatum: 01.10.2001 Beiträge: 18
|
Verfasst am: 03.10.2001 - 13:46 Titel: Zahlen runden - nur zwei stellen anzeigt nach dem koma :-) |
|
|
set x to text returned of (display dialog "Bitte geben sie den betrag ein" default answer "")
try -- falls keine Zahl eingegeben wurde
set x to x as real
on error
display dialog "Sie sollten doch eine Zahl eingeben!!!"
end try
set x to x / 1.95583
set y to x * 1.95583
(display dialog "EURO " & y & return & "DM " & x)
ich hätte gerne das es nur zwei stellen anzeigt nach dem koma |
|
Nach oben |
|
 |
Snow Administrator


Anmeldedatum: 21.11.2000 Beiträge: 1946 Wohnort: Deiningen
|
Verfasst am: 03.10.2001 - 19:07 Titel: Zahlen runden |
|
|
Hallo Skripter,
ich habe mal etwas experimentiert.
set x to text returned of (display dialog "Bitte geben sie den Betrag ein" default answer "" )
try -- falls keine Zahl eingegeben wurde
set x to x as real
on error
display dialog "Sie sollten doch eine Zahl eingeben!!!"
end try
set y1 to x / 1.95583 -- reguläre Division
set y2 to x div 1.95583 -- ganzzahliges Ergebnis
set z to (y1 - y2) as string -- Nachkommastellen
set z1 to ((characters 1 thru 4) of z as string) as real
if character 5 of z as real > 5 then
set z1 to z1 + 0.01
end if
set y3 to y2 + z1
(display dialog "EURO " & x & return & "DM " & y3)
Zunächst einmal: x ist der Eurobetrag (der Wert, der im Dialog eingegeben wurde)
In der drittletzen Zeile rechnest du den Betrag um. In der vorletzten Zeile musst du ihn dann wieder zurückrechnen.
Einfacher wäre gewesen:
set y to x / 1.95583
Nun zu meiner Version:
Es wird zunächst einmal die normale Division (mit Nachkommastellen) durchgeführt. Danach folgt eine Division, die nur ein Ergebnis ohne Nachkommastellen liefert.
set y2 to x div 1.95583
Beide Werte voneinander abgezogen bringen den Nachkomma-Wert.
Dieser wird temporär in einen Textwert umgewandelt, die ersten 4 Zeichen daraus werden weiterverwendet. Nun erfolgt noch die Prüfung, ob die 5. Stelle > 5 ist. Ist das der Fall, wird zum (bereits wieder in eine Dezimalzahl gewandelten) Wert der Nachkommastellen noch 0.01 hinzugezählt. _________________ Peter
-
Fischer-Bayern.de|Shadetreemicro.com
Zuletzt bearbeitet von Snow am 01.03.2003 - 14:12, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Snow Administrator


Anmeldedatum: 21.11.2000 Beiträge: 1946 Wohnort: Deiningen
|
Verfasst am: 03.10.2001 - 19:24 Titel: Zahlen runden |
|
|
Noch ein Nachtrag:
Das Rundungsverhalten kann natürlich bei der if-Abfrage angepasst werden.
if character 5 of z as real > 4 then
set z1 to z1 + 0.01
end if
So wird bereits ab 5 aufgerundet.
Die Standard Additions bieten zwar auch eine Rundungsmöglichkeit. Jedoch ist dort das Ergebnis immer eine Ganzzahl.
Result: integer -- the rounded value
Zu erwähnen wäre noch folgendes:
Den Teil, der bei einer Division mit 'div' wegfällt, kann man so ermitteln:
set y to x mod 1.95583 _________________ Peter
-
Fischer-Bayern.de|Shadetreemicro.com
Zuletzt bearbeitet von Snow am 01.03.2003 - 14:14, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Juergi •->


Anmeldedatum: 02.10.2001 Beiträge: 4
|
Verfasst am: 04.10.2001 - 07:30 Titel: Zahlen runden |
|
|
Um "mal eben schnell" auf 2 Nachkommastellen zu runden, kann auch die Standard-Applescript Funktion "round" mit einem Trick verwendet werden:
Der Befehl
(round(x * 100)) / 100)
rundet die Zahl x auf 2 Nachkommastellen.
Man muß nur aufpassen, das bei sehr großen Zahlen der Wert aus den Datenbereich rutschen kann, und so Ungenauigkeiten entstehen. Je mehr Nachkommastellen gebraucht werden, desto schlimmer der Effekt.
(Geändert von Juergi am 8:59 Uhr am 4 Okt. 2001) _________________ J¸rgen Venne
L. N. Schaffrath Druckmedien |
|
Nach oben |
|
 |
Snow Administrator


Anmeldedatum: 21.11.2000 Beiträge: 1946 Wohnort: Deiningen
|
Verfasst am: 04.10.2001 - 22:42 Titel: Zahlen runden |
|
|
Ich habe mich heute nochmal mit der Zahlenrundung beschäftigt. Die bisher geposteten Möglichkeiten funktionieren leider mit höheren Zahlen nicht, da AppleScript dann auf die wissenschaftliche Darstellung wechselt.
set dieZahl to 1.2345987E+4
Eine funktionierende Lösung habe ich gleich in einen entsprechenden Artikel im Praxisteil verpackt.
Hier geht's lang... _________________ Peter
-
Fischer-Bayern.de|Shadetreemicro.com
Zuletzt bearbeitet von Snow am 01.03.2003 - 14:15, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
macgix •--->


Anmeldedatum: 13.12.2000 Beiträge: 206 Wohnort: K–ln
|
Verfasst am: 05.10.2001 - 00:34 Titel: Zahlen runden |
|
|
Ich galube, das steht auch in einem der Guidebook Module und sieht so aus. Zwei Sachen sind zu beachten. Vor dem DIV muss der Wert leicht erhöht werden, damit keine Rechen-(Rundungs)fehler auftreten und ohne DIV und MOD geht es auch nicht:
on RoundConvertTruncate(this_number, the_number_of_decimal_places)
if the_number_of_decimal_places is 1 then
set this_number to this_number + 0.05
else if the_number_of_decimal_places is 2 then
set this_number to this_number + 0.005
else if the_number_of_decimal_places is 3 then
set this_number to this_number + 5.0E-4
end if
set first_part to TextToNum(this_number div 1)
if the_number_of_decimal_places is 1 then
set second_part to (this_number mod 1) div 0.1
if second_part is 0 then set second_part to "0"
else if the_number_of_decimal_places is 2 then
set second_part to (this_number mod 1) div 0.01
if second_part < 10 then set second_part to ( "0" & second_part as text) as string
else if the_number_of_decimal_places is 3 then
set second_part to (this_number mod 1) div 1.0E-3
if second_part < 10 then
set second_part to ( "00" & second_part as text) as string
else if second_part < 100 then
set second_part to ( "0" & second_part as text) as string
end if
if second_part is 0 then set second_part to "000"
end if
set theTotal to (first_part & "." & second_part as string)
return theTotal
end RoundConvertTruncate
_________________ [macgix] |
|
Nach oben |
|
 |
|