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