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

Währungsrechnung bzw. 2 Nachkommastellen erzwingen

 
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Fischer-Bayern.de Foren-Übersicht -> AppleScript-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
karmunkel
•-->
•-->


Anmeldedatum: 03.11.2004
Beiträge: 28
Wohnort: Meißen

BeitragVerfasst am: 24.01.2007 - 11:17    Titel: Währungsrechnung bzw. 2 Nachkommastellen erzwingen Antworten mit Zitat

Halli hallo.

Ich möchte gern bei einer Berechnung 2 Nachkomma-Stellen im Ergebnis erzwingen. Dabei ist mein Problem nicht, aus 123,456 EUR 123,46 EUR zu machen. Die Lösung dafür findet man ja hier im Forum.

Ich suche eigentlich eine Lösung, um aus 123,4 EUR 123,40 EUR zu machen. Hat jemand dafür eine Lösung?


Beste Grüße . . . Karsten
_________________
Der Anfang einer jeden Katastrophe ist eine besch . . . ne Vermutung. :)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen AIM-Name
Wolle-77
•--->
•--->


Anmeldedatum: 25.02.2003
Beiträge: 449
Wohnort: Geldern

BeitragVerfasst am: 24.01.2007 - 12:44    Titel: Antworten mit Zitat

Hallo Karsten,

ich denke, folgendes ist eine recht elegante Lösung:

set betrag to 123.47522234234
oder auch
set betrag to 123.4

Code:
set betrag to ((round (betrag * 100)) / 100) as string
if ((length of betrag) - (offset of "," in betrag)) is 1 then set betrag to (betrag & "0") as string


Beim ersten Mal kommt "123,48" heraus und beim zweiten Mal "123,40"
_________________
Martin Wolter
--
Apple rocks the planet!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
karmunkel
•-->
•-->


Anmeldedatum: 03.11.2004
Beiträge: 28
Wohnort: Meißen

BeitragVerfasst am: 24.01.2007 - 14:50    Titel: Antworten mit Zitat

Halli hallo.

Die einfachen Dinge übersieht man eben doch zu oft. :-)


Viele Dank . . . Karsten
_________________
Der Anfang einer jeden Katastrophe ist eine besch . . . ne Vermutung. :)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen AIM-Name
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1067

BeitragVerfasst am: 24.01.2007 - 15:24    Titel: Antworten mit Zitat

mach ma betrag=123 Wink
_________________
"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
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1067

BeitragVerfasst am: 24.01.2007 - 15:27    Titel: Antworten mit Zitat

das hier finde ich eleganter! Kein IF!
Code:
set betrag to text 1 thru -2 of (((round (betrag * 100)) / 100+0.001) as string)

_________________
"All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")


Zuletzt bearbeitet von Skeeve am 24.01.2007 - 17:55, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
karmunkel
•-->
•-->


Anmeldedatum: 03.11.2004
Beiträge: 28
Wohnort: Meißen

BeitragVerfasst am: 24.01.2007 - 17:26    Titel: Antworten mit Zitat

Halli hallo.

Skeeve hat Folgendes geschrieben:
mach ma betrag=123 ;)


Was passiert denn da?


Beste Grüße . . . Karsten
_________________
Der Anfang einer jeden Katastrophe ist eine besch . . . ne Vermutung. :)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen AIM-Name
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1067

BeitragVerfasst am: 24.01.2007 - 17:50    Titel: Antworten mit Zitat

karmunkel hat Folgendes geschrieben:
Halli hallo.

Skeeve hat Folgendes geschrieben:
mach ma betrag=123 Wink


Was passiert denn da?

Versuch
macht
kluch!

Oder ißt Du nur vorverdautes?
_________________
"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
Wolle-77
•--->
•--->


Anmeldedatum: 25.02.2003
Beiträge: 449
Wohnort: Geldern

BeitragVerfasst am: 24.01.2007 - 22:02    Titel: Antworten mit Zitat

Hallo Skeeve,

also bei glatten Beträgen wie 123 kommt wie erwartet 123,00 heraus; sowohl bei Deiner als auch bei meiner Methode. Ich weiß jetzt nicht, warum Du den Smiley gesetzt hast.

Also (evtl. für Karsten) aufgebröselt funktioniert meine Methode ja, in dem ich die Zahl auf zwei Nachkommastellen runden lasse.

Anschließend prüfe ich in einer zweiten Zeile, ob die Zahl nur ,0 hat; also ob das Koma sich an vorletzter Stelle (durch Prüfung, ob die Länge bis zum Komma von der Gesamtlänge abgezogen 1 ist). Falls dem so ist, füge ich strikt eine "0", also eine Text-Null hinzu.


Du prüfst gar nichts, kommst daher auch mit einer Zeile aus, sondern rundest ebenso die Zahl, fügst dieser dann aber den Wert von 0.001 hinzu, sodaß immer X,XX1 herauskommt und schneidest diese Zahl zurecht, indem Du die letzte Ziffer kappst.


Logischer von der Anweisung und einfacher zu verstehen ist mein Zweizeiler, eleganter im Aussehen ist Dein Einzeiler, auch wenn er mit einem "Trick" arbeitet und letztendlich auch gleich viele Arbeitsschritte für den Rechner bedeutet.
_________________
Martin Wolter
--
Apple rocks the planet!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
spirigwi
•----->
•----->


Anmeldedatum: 10.07.2003
Beiträge: 1517
Wohnort: Olten-CH

BeitragVerfasst am: 24.01.2007 - 22:02    Titel: Antworten mit Zitat

Applaus
Kleine Lesehilfe gefällig? Bitt scheen:

Zitat:
global betrag
set betrag to 123

display dialog my SkeeveER() buttons {"SkeeveER"} --OS9.2.2-->123.00
display dialog my wolle77ER() buttons {"wolle77ER"} --OS9.2.2-->123.0
--

on SkeeveER()
   
set betrag to text 1 thru -2 of (((round (betrag * 100)) / 100 + 1.0E-3) as string)
end SkeeveER

on wolle77ER()
   
set betrag to ((round (betrag * 100)) / 100) as string
   
if ((length of betrag) - (offset of "," in betrag)) is 1 then set betrag to (betrag & "0") as string
   
betrag
end wolle77ER


heisst es bei euch auch sowas ähnliches wie bei mir in Skeeves Skript:
hat Folgendes geschrieben:
"1.0 E -3"

statt etwa ca. so:
hat Folgendes geschrieben:
0. 000001

Da wir OS9-CLASSICS-AppleSkript-Seite von Snow benutzen:
darf ich danach fragen?
_________________
 Skript-Fan => ein � -Fan =>Scr¿¿-KongFuSius_Kurpfusius
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
karmunkel
•-->
•-->


Anmeldedatum: 03.11.2004
Beiträge: 28
Wohnort: Meißen

BeitragVerfasst am: 24.01.2007 - 23:35    Titel: Antworten mit Zitat

Guten Tag.

Skeeve hat Folgendes geschrieben:
karmunkel hat Folgendes geschrieben:
Halli hallo.

Skeeve hat Folgendes geschrieben:
mach ma betrag=123 ;)


Was passiert denn da?

Versuch
macht
kluch!

Oder ißt Du nur vorverdautes?


Da bei mir am Ende 123,00 als Ergebnis steht, wollte ich nur bitte mal nachfragen, was bei Ihnen unter der von Ihnen gegebenen Bedingung als Ergebnis herauskommt. Ich hätte mich, so wie Sie es vorgemacht haben, etwas ausführlicher äußern sollen. Entschuldigen Sie bitte. Vielleicht können Sie mir aber dennoch schreiben, was bei Ihnen passiert. Vielen Dank für Ihre Mühen im Voraus.


Mit freundlichen Grüßen . . . Karsten
_________________
Der Anfang einer jeden Katastrophe ist eine besch . . . ne Vermutung. :)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen AIM-Name
karmunkel
•-->
•-->


Anmeldedatum: 03.11.2004
Beiträge: 28
Wohnort: Meißen

BeitragVerfasst am: 24.01.2007 - 23:40    Titel: Antworten mit Zitat

Halli hallo.

Wolle-77 hat Folgendes geschrieben:
Hallo Skeeve,

also bei glatten Beträgen wie 123 kommt wie erwartet 123,00 heraus;

... schnipp . . .

Logischer von der Anweisung und einfacher zu verstehen ist mein Zweizeiler, eleganter im Aussehen ist Dein Einzeiler, auch wenn er mit einem "Trick" arbeitet und letztendlich auch gleich viele Arbeitsschritte für den Rechner bedeutet.


Ich hab beide Lösungen verstanden. Mein Problem wahr eigentlich nur, dass ich den Wald vor lauter Bäumen nicht gesehen habe und - das gebe ich gern zu - mit der Syntax von Appelscript noch nicht wirklich vertraut bin.

Vielen Dank nochmals für die Mühen. :-)


Beste Grüße . . . Karsten
_________________
Der Anfang einer jeden Katastrophe ist eine besch . . . ne Vermutung. :)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen AIM-Name
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1067

BeitragVerfasst am: 24.01.2007 - 23:50    Titel: Antworten mit Zitat

Wolle-77 hat Folgendes geschrieben:
also bei glatten Beträgen wie 123 kommt wie erwartet 123,00 heraus; sowohl bei Deiner als auch bei meiner Methode. Ich weiß jetzt nicht, warum Du den Smiley gesetzt hast.

Ich habe ihn in der falschen Annahme gesetzt, daß ebenjenes, ein ",0", unterdrückt würde. Also: Ich muß einen Fehler eingestehen.

Wolle-77 hat Folgendes geschrieben:
Logischer von der Anweisung und einfacher zu verstehen ist mein Zweizeiler, eleganter im Aussehen ist Dein Einzeiler, auch wenn er mit einem "Trick" arbeitet

"Trick" istes nur für die, die es nicht verstehen Wink Es ist simple Mathematik.

Du hast mich von Deinem Ansatz aber noch nicht überzeugt. Schreib Dein Script doch mal bitte auf 3, 4, oder gar 9 Stellen hinter dem Komma um. Oder mach doch mal einen Handler draus! Und dann im Vergleich dazu meins:
Zitat:
on fix of numerical to decimal
   set factor to 10 ^ decimal
   set fixed_num to round (numerical * factor)
   return text 1 thru -2 of (((fixed_num + 0.1) / factor) as string)
end fix


Aufzurufen mit z.B.:
Code:
set ergebnis to fix of betrag to 3


Ich gebe zu 10^decimal ist nicht unbedingt effizient, aber wenn wir eine Maximalzahl von, sagen wir 10 Stellen zulassen, können wir das auch ersetzen durch:
set factor to ("1" & text 1 thru decimal of "0000000000") as number

Wolle-77 hat Folgendes geschrieben:
und letztendlich auch gleich viele Arbeitsschritte für den Rechner bedeutet.

Das sehe ich anders.
Unsere Rundungsalgorithmen unterscheiden sich nur durch einen Rechenschritt mehr bei mir. Da liegst Du vorn.

Bei mir ist der nachfolgende Aufwand das Zurechtstutzen eines Strings auf alles bis aufs letzte Zeichen.

Also abhängig vom zugrundeliegenden Algorithmus O(1) wenn die Länge eines Strings immer bekannt ist oder O(n) wenn sie jedesmal gezählt werden muß.

Die nachfolgenden Schritte bei Dir sind:
1. Längenbestimmung O(1) oder O(n)
2. Zeichensuche O(n)
3. Subtraktion und
4. Vergleich
Abhängig vom Ergebnis kommt noch hinzu
5. Zeichen am Ende Anfügen was entweder O(1) oder O(n) ist

Im Idealfall sind es bei Dir also 1+O(n) Operationen mehr.

Ja! Ich weiß! Keiner mag Klugscheißer... Aber da ich nun schon mehrere Jahrzehnte mit solchen Rundungs- und Darstellungsgeschichten rumhample, habe ich für mich beschlossen, daß diese Methode meine Methode der Wahl ist.
_________________
"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
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1067

BeitragVerfasst am: 24.01.2007 - 23:54    Titel: Antworten mit Zitat

karmunkel hat Folgendes geschrieben:
Da bei mir am Ende 123,00 als Ergebnis steht,

Ich sag doch "Versuch macht kluch"! Ich hätte das beherzigen sollen, ehe ich so große Töne spucke Wink Du hast natürlich Recht. Aber das habe ich ja auch noch ausführlicher oben im Text an Wolle geschrieben.
_________________
"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
spirigwi
•----->
•----->


Anmeldedatum: 10.07.2003
Beiträge: 1517
Wohnort: Olten-CH

BeitragVerfasst am: 25.01.2007 - 09:04    Titel: Antworten mit Zitat

Skeeve hat Folgendes geschrieben:
Ich habe ihn in der falschen Annahme gesetzt, daß ebenjenes, ein ",0", unterdrückt würde

Skeeve hat Folgendes geschrieben:
daß diese Methode meine Methode der Wahl ist.

und wohl auch von internationaler Bedeutung ist, denn:
wolle-77 hat Folgendes geschrieben:
(offset of "," in betrag))
Skeeve hat Folgendes geschrieben:
100+0.001

und da wir in CH als Dezimal den Punkt "." und nicht das Komma "," benutzen, wohl auch weniger stöhranfällig, wie fig. zeigt.

Zitat:
display dialog my SkeeveER() buttons {"SkeeveER"} --OS9.2.2-->123.00
display dialog my wolle77ER() buttons {"wolle77ER"} --OS9.2.2-->123.0

_________________
 Skript-Fan => ein � -Fan =>Scr¿¿-KongFuSius_Kurpfusius
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1067

BeitragVerfasst am: 25.01.2007 - 10:07    Titel: Antworten mit Zitat

spirigwi hat Folgendes geschrieben:
und da wir in CH als Dezimal den Punkt "." und nicht das Komma "," benutzen, wohl auch weniger stöhranfällig,

Danke, Willi! Das fiel mir gestern Nacht, kurz vorm Einschlafen auch noch ein, aber da war es mir dann auch erstmal egal Wink
_________________
"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
Beiträge der letzten Zeit anzeigen:   
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Fischer-Bayern.de Foren-Übersicht -> AppleScript-Forum 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