Fischer-Bayern.de
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Ergebnis im Dezimalformat statt Exponentialformat

 
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> AppleScript X
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Mart
•->
•->


Anmeldedatum: 22.04.2010
Beiträge: 7

BeitragVerfasst am: 24.05.2010 - 00:26    Titel: Ergebnis im Dezimalformat statt Exponentialformat Antworten mit Zitat

Hallo ins Forum,

AS liefert mir das Ergebnis einer Berechnung im Exponentialformat, also zB 1.103E+4. Ich benötige die Zahl in einer Textverarbeitung allerdings im deutschen Dezimalformat am besten mit Tausendertrenner, also in diesem Beispiel 11.030,00. Als Integer bekomme ich zwar das Exponentialformat weg, aber natürlich keine zwei Nachkommastellen.
Danke für Eure Hilfe.

Mart
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
-hans-
•-->
•-->


Anmeldedatum: 30.04.2009
Beiträge: 45

BeitragVerfasst am: 24.05.2010 - 15:41    Titel: Antworten mit Zitat

edit: habe das umsortieren der liste noch herausgenommen (da hatte beim ersten mal das kleinhirn wohl noch resturlaub Wink)

Hi Mart,

hoffe es funktioniert wie erwartet:

Code:
set tid to AppleScript's text item delimiters
set AppleScript's text item delimiters to ""
set MeineRechnung to pi * 1897.569

set GegliederteZahl to my Zahlgliedern(MeineRechnung)

set AppleScript's text item delimiters to tid

on Zahlgliedern(x)
   set rechnung to x * 100 as integer
   set nrlist to characters 1 thru -3 of (rechnung as string)
   set NachKomma to "," & (characters -2 thru -1 of (rechnung as string) as string)
   
   set nrlist02 to {}
   set Counter to 0
   repeat with j from (count of nrlist) to 1 by -1
      set mynr to item j of nrlist
      if Counter = 3 then
         set beginning of nrlist02 to mynr & "."
         set Counter to 1
      else
         set beginning of nrlist02 to mynr
         set Counter to Counter + 1
      end if
      
   end repeat
   set ergebnis to (nrlist02 as string) & NachKomma
   return ergebnis
end Zahlgliedern


Zuletzt bearbeitet von -hans- am 25.05.2010 - 07:54, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mart
•->
•->


Anmeldedatum: 22.04.2010
Beiträge: 7

BeitragVerfasst am: 24.05.2010 - 20:07    Titel: Antworten mit Zitat

Hallo hans,

wow, das ist ja eine umfangreiche Lösung, ganz herzlichen Dank dafür. Ich werde das natürlich ausprobieren (morgen Abend, dann habe ich etwas mehr Zeit). Mich wundert, dass AS so gängige Dinge, wie das formatieren von Zahlen, nicht einfacher anbietet.
Wie auch immer: Nochmals ganz herzlichen Dank für Deine Hilfe.

Mart
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 24.05.2010 - 20:07    Titel: Antworten mit Zitat

Oder so: (Runden muß man vorher)

Code:
{zahlformat(-123456 * 12356 * 123456 + pi), zahlformat(314159 * 10000)}

to zahlformat(x)
   if x < 0 then
      set s to "-"
      set x to -x
   else
      set s to ""
   end if
   try
      set n to text 2 thru -1 of ((x mod 1) as text)
   on error
      set n to ",0"
   end try
   set x to x div 1
   if x = 0 then return s & "0" & n
   set t to ""
   repeat while x > 999
      set n to text 2 thru -1 of (((x mod 1000) as integer) + 1000 as text) & t & n
      set t to "."
      set x to x div 1000
   end repeat
   set n to ((x as integer) as text) & t & n
   return s & n
end zahlformatt


Update: Jetzt auch mit negativen Zahlen
_________________
"All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")


Zuletzt bearbeitet von Skeeve am 25.05.2010 - 23:27, insgesamt 3-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
hubionmac
•--->
•--->


Anmeldedatum: 26.02.2004
Beiträge: 245
Wohnort: Münster

BeitragVerfasst am: 25.05.2010 - 08:31    Titel: Antworten mit Zitat

do shell script "echo '3.14159265359*10000' | bc"
_________________
hubionmac.com akzeptiere Paypal und Pizza
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
spazek
•-->
•-->


Anmeldedatum: 24.02.2007
Beiträge: 50

BeitragVerfasst am: 25.05.2010 - 16:07    Titel: Antworten mit Zitat

Hallo!

Unter der Rubrik "Workshop" findest du eine Anleitung zum Runden und Umwandeln der Zahlen

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

Mit bc kann man sehr gut rechnen
Zitat:
do shell script "(echo 'scale=2; (314159.265359*10000)/1' | bc -l)"

würde gleich auch kaufmännisch runden

Die beiden hier geposteten Skripte habe ich mal probiert. Da kommen bei mir schnell krude Ergebnisse Sad


Unter hohabadu.de findest du viele praktische Handler, z.B. diesen hier: Klick
Den "hohaReplacer" nehmend, würde ich so etwas basteln:

Code:

set x to do shell script "(echo 'scale=2; (314159.265359*10000)/1' | bc -l)"

set x to hohaReplacer(x, {"."}, {","}, "")

try
   set T1 to text -6 thru -1 of x
   set T2 to text -7 thru 1 of x
   set Nx to (T2 & "." & T1 as text)
on error
   set Nx to x
end try

try
   set T3 to text -10 thru -1 of Nx
   set T4 to text -11 thru 1 of Nx
   set Nx to (T4 & "." & T3 as text)
   set Nx to Nx
end try

try
   set T5 to text -14 thru -1 of Nx
   set T6 to text -15 thru 1 of Nx
   set Nx to (T6 & "." & T5 as text)
on error
   set Nx to Nx
end try

--und so weiter

return Nx

on hohaReplacer(input, srchList, replList, separator)
   if class of srchList is string then
      set AppleScript's text item delimiters to separator
      set srchList to every text item of srchList
      set replList to every text item of replList
   else
      set AppleScript's text item delimiters to ""
   end if
   
   repeat with i from 1 to (count of srchList)
      set srch to item i of srchList
      set repl to item i of replList
      set AppleScript's text item delimiters to srch
      set the temp to every text item of input
      set AppleScript's text item delimiters to repl
      set input to temp as string
   end repeat
   
   set AppleScript's text item delimiters to ""
   return input
end hohaReplacer


Gruß
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 25.05.2010 - 19:48    Titel: Antworten mit Zitat

@ spazek & hubionmac: Wo findet sich in Eurer Lösung das Dezimalkomma (okay, bei spazek vorhanden) und wo die Tausenderunterteilung mit "."?
_________________
"All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
spazek
•-->
•-->


Anmeldedatum: 24.02.2007
Beiträge: 50

BeitragVerfasst am: 25.05.2010 - 22:20    Titel: Antworten mit Zitat

Bei mir sind die Tausender-Stellen doch berücksichtigt!
(Im Beispiel bis zur Milliarde)

Ich hätte das Skript als Alternative gar nicht gepostet, wenn ich mit deinem Skript bei größeren Zahlen (123456 * 12356) nicht komische Ergebnisse gehabt hätte (Davon mal abgesehen finde ich es wirklich sehr bemerkenswert!)

Gruß
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 25.05.2010 - 22:31    Titel: Antworten mit Zitat

spazek hat Folgendes geschrieben:
Bei mir sind die Tausender-Stellen doch berücksichtigt!
(Im Beispiel bis zur Milliarde)

Achso! Dafür ist der komische Code den ich zu faul war mir anzusehen Wink Verzeihung!

spazek hat Folgendes geschrieben:
Ich hätte das Skript als Alternative gar nicht gepostet, wenn ich mit deinem Skript bei größeren Zahlen (123456 * 12356) nicht komische Ergebnisse gehabt hätte (Davon mal abgesehen finde ich es wirklich sehr bemerkenswert!)

Sag das doch gleich! Problem behoben!
_________________
"All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
spazek
•-->
•-->


Anmeldedatum: 24.02.2007
Beiträge: 50

BeitragVerfasst am: 25.05.2010 - 22:58    Titel: Antworten mit Zitat

Skeeve hat Folgendes geschrieben:

Sag das doch gleich! Problem behoben!


Sorry, stimmt aber immer noch nicht (314159 * 10000)
Und ja: ist "komischen Code". Aber funktioniert.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 25.05.2010 - 23:28    Titel: Antworten mit Zitat

spazek hat Folgendes geschrieben:
Sorry, stimmt aber immer noch nicht (314159 * 10000)
Und ja: ist "komischen Code". Aber funktioniert.

Was für ein dämlicher Fehler! Danke fürs Rausfinden. Versuch Dich mal am neuen Reparaturversuch Smile
_________________
"All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
-hans-
•-->
•-->


Anmeldedatum: 30.04.2009
Beiträge: 45

BeitragVerfasst am: 26.05.2010 - 08:03    Titel: Antworten mit Zitat

Guten Morgen Smile

Mir ist völliig unklar wieso scale das konstrukt "Ergebnis/1" braucht um tatsaechlich die Nachkommastellen zu begrenzen. Höhere Mathematik¿

Code:
set x to do shell script "echo 'scale=2; 314159.265359*10001' | bc -l"
-->"3141906812.855359"
do shell script "echo 'scale=2; " & x & " /1' | bc -l"
-->"3141906812.85"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 26.05.2010 - 09:31    Titel: Antworten mit Zitat

-hans- hat Folgendes geschrieben:
Guten Morgen Smile

Mir ist völliig unklar wieso scale das konstrukt "Ergebnis/1" braucht um tatsaechlich die Nachkommastellen zu begrenzen. Höhere Mathematik¿


Lies selbst:
man bc hat Folgendes geschrieben:
scale
defines how some operations use digits after the decimal point.

"some", nicht "all"

weiter
man bc hat Folgendes geschrieben:

expr * expr
The result of the expression is the product of the two expres-
sions.

expr / expr
The result of the expression is the quotient of the two expres-
sions. The scale of the result is the value of the variable
scale.

_________________
"All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
-hans-
•-->
•-->


Anmeldedatum: 30.04.2009
Beiträge: 45

BeitragVerfasst am: 27.05.2010 - 08:37    Titel: Antworten mit Zitat

Vielen Dank Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> AppleScript X Alle Zeiten sind GMT + 2 Stunden
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2002 phpBB Group
Deutsche Übersetzung von phpBB.de


AppleScript für absolute Starter