Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Peacemaker am 22.02.05 - 09:45:06

Titel: Notes und Kommastellenrechnen, schonmal erlebt???
Beitrag von: Peacemaker am 22.02.05 - 09:45:06
Hallo, mal was ganz besonders seltsames:

ich habe folgenden input für eine Rechenschleife:

1 Durchlauf: 1320
2 Durchlauf: 1320 + 101.83
3. Durchlauf: 1421 + 84.2105
4 Druchlauf: 843526 + 0
5 Durchlauf: 843526 + 101.7
6 Durchlauf: 843627,7


Was soll das? Wieso rechnet er die 84.2105 als 842105 - bei allen anderen Komma werten gehts.

Hier nochmal der Code, glaub aber net das es daran liegt (Die Promts geben den Output von oben):

Code
	@While(start<ende;

@Prompt([OK];"i";"Neu gesamt= " +@Text(trans));
@Prompt([OK];"i";"+ "+@Text(transactions[start]));

	trans:=trans+@ToNumber(transactions[start]);

	start:=start+1	);
erg:=erg+@NewLine+@Text(slot)+"|"+@Text(trans/delta);
tmperg:=trans/delta;
erg2:=erg2+@NewLine+@Text(slot)+"|"+"-20%|"+@Text(tmperg*0,8);
i:=i+1);
Titel: Re: Notes und Kommastellenrechnen, schonmal erlebt???
Beitrag von: klaussal am 22.02.05 - 10:53:02
... weil der . kein , ist ?

klaus
Titel: Re: Notes und Kommastellenrechnen, schonmal erlebt???
Beitrag von: Peacemaker am 22.02.05 - 10:57:18
aber wieso ist dann 101.83 nicht 10183 ??? Und soweit ich weiss ist im englischen der . als seperator zulässig und hat bisher bei mri in notes noch keine probleme gemacht.
Titel: Re: Notes und Kommastellenrechnen, schonmal erlebt???
Beitrag von: Tode am 22.02.05 - 12:06:59
Dein Prompt sagt ÜBERHAUPT nix über die Eingangszahlen...

Ich vermute schwer, dass Dein Transactions- Feld schon falsch gefüllt ist...
Mal mit einer Zahl, und mal mit nem Text...

Aber Dein Beispiel verdeutlicht mir mal wieder, warum ich -obwohl es inzwischen geht- kein Freund von Schleifen in Formelsprache bin....

Deine Lösung:

@While(start<ende;
trans:=trans+@ToNumber(transactions[start]);
start:=start+1 );

lässt sich ganz einfach in EINER Zeile Code abhandeln:

trans := @Sum( @ToNumber( transactions ) );

Aber abgesehen davon würde ich mal folgendes zu Debug- Zwecken machen:
einfach in einen Aktionsbutton folgendes schreiben:

@Prompt( [OK] ; "Ohne ToNumber" ; @Implode( @Text( transactions ) ) );
@Prompt( [OK] ; "Mit ToNumber" ; @Implode( @Text( @ToNumber( transactions ) ) ) );

ich vermute den Fehler nämlich schwer im @ToNumber...

Gruß
Tode
Titel: Re: Notes und Kommastellenrechnen, schonmal erlebt???
Beitrag von: Peacemaker am 22.02.05 - 12:13:09
ok, @tonumber cuttet den . einfach weg - gibt es da eine alternative????
Titel: Re: Notes und Kommastellenrechnen, schonmal erlebt???
Beitrag von: Glombi am 22.02.05 - 12:36:49
Zahlen in Textfeldern - da fällt man früher oder später immer auf die Nase!
Ein "." kann ein Tausendertrenner oder ein Dezimaltrenner sein. Ein "," ist ebenso nicht eindeutig.

Für Deinen Fall sieht es so aus, als ob das "." durch ein "," vor dem Umwandeln mit @ToNumber ersetzt werden müsste.

Andreas
Titel: Re: Notes und Kommastellenrechnen, schonmal erlebt???
Beitrag von: Peacemaker am 22.02.05 - 13:05:58
danke soweit - aber dann habe ich jetzt ein richtiges Problem. Die Datenbank wertet Log-Einträge aus. Bekommt also txtinput der dann aufgebrochen wird. dort sind die nachkommastellen mit . statt , - gibt es einen replace algorithmus wie ich in jeder beliebeigen zahl . durhc , ersetzen kann? Es sind auch ganze zahlen dabei - es betrifft also nicht alle
Titel: Re: Notes und Kommastellenrechnen, schonmal erlebt???
Beitrag von: klaussal am 22.02.05 - 13:25:58
... gibt es:
Code
Function komma2dot(sstring As String)
      'Wird von Sub "wareneingang_loeschen" aufgerufen, dieses wiederung ggfls. via Button "Letzte Eingabe widerrufen" in Maske "Bestpos"
	Dim retval As String
	Dim char As String
	For x = 1 To Len(sstring)
		char$ = Mid(sstring, x, 1)
		If char$ = "," Then
			char$ = "."
		End If
		retval$ = retval$ + char$
	Next
	komma2dot = retval$
End Function

klaus
Titel: Re: Notes und Kommastellenrechnen, schonmal erlebt???
Beitrag von: Tode am 22.02.05 - 13:36:47
ich weiss zwar nicht, wofür komma2dot gut sein soll, wenn es in Script den Befehl "Replace" gibt, aber egal.

Da der ganze Thread sowieso auf Formel- Sprache aufsetzt, ist die Funktion sowieso obsolet.

Aber ich verstehe auch ehrlich gesagt die Frage nicht...
Die Funktion
@ToNumber( @ReplaceSubstring( transactions ; "." ; "," ) )
sollte eigentlich zu den Grundkenntnissen eines jeden Programmierers gehören...

So langsam bekomme ich das Gefühl, dass hier jemand aus der "Normalen" Programmierung kommt, und sich die Formel- Sprache noch nicht wirklich angeschaut hat. (sorry wenn ich falsch liege, aber der Verdacht drängt sich auf, wenn nicht mal "@Sum" und "@ReplaceSubstring" bekannt sind / in der Hilfe gefunden werden, und wenn ausserdem in der Formel- Sprache mit (vermeidbaren) Schleifen gearbeitet wird)

Gruß
Tode
Titel: Re: Notes und Kommastellenrechnen, schonmal erlebt???
Beitrag von: klaussal am 22.02.05 - 13:38:54
@Torsten,

seh ich genauso, habe aber mal die Function trotzdem reingestellt. Vielleicht hilft die ja irgendwann irgendjemand ......

klaus
Titel: Re: Notes und Kommastellenrechnen, schonmal erlebt???
Beitrag von: aki am 22.02.05 - 13:47:45
Hi,

warum macht Ihr Euch das Leben so schwer?

Auszug aus der Notes Hilfe:

NotesInternational class
-> Represents the international settings in the operating environment, for example, the Windows Control Panel international settings.

DecimalSep property
-> Read-only. The decimal separator in number format, for example, the decimal point.

Syntax
To get: string = notesInternational.DecimalSep

ThousandsSep property 
-> Read only. The thousands separator in number format, for example, the comma.

Syntax
To get: string = notesInternational.ThousandsSep

Also:
Step 1 : Die eingegebene Zahl (im Textformat) einlesen
Step 2 : Die Eingabe validieren und dabei die Trennzeichen anpassen
Step 3 : Den Text in eine Zahl umwandeln
Step 4 : Die gewünschte Berechnung durchführen

Andreas
Titel: Re: Notes und Kommastellenrechnen, schonmal erlebt???
Beitrag von: Tode am 22.02.05 - 13:50:43
Warum wir uns das Leben so schwer machen ???
Weil wir in der FORMEL-SPRACHE sind... nicht in LotusScript...

Gruß
Tode
Titel: Re: Notes und Kommastellenrechnen, schonmal erlebt???
Beitrag von: aki am 22.02.05 - 13:59:43
Hi,

wenn Du den Code nicht umstellen kannst, dann schreib Dir einen LostusScript-Agenten, der Dir die Werte in die Notes.ini oder in ein Profildokument schreibt.

Den Agenten startest Du per @Formel-Befehl und holst Dir dann die gewünschten Werte an der entsprechenden Stelle ab.

Andreas 
Titel: Re: Notes und Kommastellenrechnen, schonmal erlebt???
Beitrag von: Tode am 22.02.05 - 14:07:29
ich weiss nicht, ob Ihr's bemerkt habt, aber der eigentliche "Verursacher" des Threads hat sich schon lange ausgeklinkt... Wir diskutieren hier also um nix und wieder nix.

Gruß
Tode
Titel: Re: Notes und Kommastellenrechnen, schonmal erlebt???
Beitrag von: Glombi am 22.02.05 - 14:40:59
Na vielleicht ist er beim Essen - soooo lange ist es ja auch nicht her.

Das mit dem
Zitat
NotesInternational class
-> Represents the international settings in the operating environment, for example, the Windows Control Panel international settings.

DecimalSep property

....
bringt aber nicht wirklich viel. Wenn Zahlen in einem Textfeld stehen, werden die mit den Einstellungen des jeweiligen Users hereingeschrieben. Es kann durch aus sein, dass es sowohl "." als auch "," gibt.
Also: Wenn Ihr wirklich mit Zahlen operieren wollt, dann nehmt ein Zahlfeld! Alles andere ist äußerst fehleranfällig!

Andreas
Titel: Re: Notes und Kommastellenrechnen, schonmal erlebt???
Beitrag von: Peacemaker am 22.02.05 - 21:39:54
So Leutz- musste noch ein wenig wo anders dran arbeiten.

Vielen Dank, auf das Replace hätte ich auch kommen müssen - naja der wald vor lauter bäumen ebend...

Danke
Titel: Re: Notes und Kommastellenrechnen, schonmal erlebt???
Beitrag von: Semeaphoros am 23.02.05 - 21:03:26
Nachwort von einem, der solches Zeugs auch schon hat machen müssen (allerdings nicht in Notes).

Wenn man Zahlen von Text in Werte umwandeln will, ist das Heranziehen der International-Properties absolut unerlässlich. Komma ist bei den Amis Tausendertrennzeichen, in D Dezimaltrenner und in CH gar nicht gebraucht. Punkt ist bei den Amis und in CH Dezimaltrenner, in D nicht gebraucht ... ergo, die Sache ist enorm heikel.

Funktionieren tut das ganze dann nur, wenn man auch weiss, mit welcher Konvention der Text erstellt wurde, wie Andreas G korrekt hingewiesen hat.
Titel: Re: Notes und Kommastellenrechnen, schonmal erlebt???
Beitrag von: koehlerbv am 23.02.05 - 21:38:23
Funktionieren tut das ganze dann nur, wenn man auch weiss, mit welcher Konvention der Text erstellt wurde ...

Und genau das kann man später nicht mehr ermitteln.
Das Speichern von Inhalten in Feldern, die dem zu speichernden Datentyp nicht entsprechen, ist verheerend - vor allem, wenn die Software freundlicherweise viele landestypische Darstellungen anbietet. Zahl in Text, Datum in Text - immer ein absolutes No-no !

Bernhard
Titel: Re: Notes und Kommastellenrechnen, schonmal erlebt???
Beitrag von: Semeaphoros am 23.02.05 - 21:44:31
Klar, allerdings ist das hier ja eine Auswertung eines Logs, ist nicht gesagt, dass man das wirklich beeinflussen kann, wir wissen ja nicht, woher das Log kommt.
Titel: Re: Notes und Kommastellenrechnen, schonmal erlebt???
Beitrag von: koehlerbv am 23.02.05 - 22:09:35
Oh ja, Jens, Du hast Wahr. Das hatte ich bereits wieder vergessen.
Jo, dann wird sich der Friedenstifter wohl einen Parser schreiben müssen. Mir ist sowas auch schon passiert - eine fremde DB musste gerade gezogen werden, in der Datums-/Zeitwerte mit allen möglichen Einstellungen in Textfeldern abgelegt waren. Sowas ist - glaube ich - noch "lustiger" als mit der endlichen Anzahl der auftretenden Kombinationen in "Zahlenfeldern", die in Wirklichkeit Text sind.

Bernhard
Titel: Re: Notes und Kommastellenrechnen, schonmal erlebt???
Beitrag von: PeterD2 am 27.02.07 - 11:15:13
Also eines habe ich bei der ganzen Diskussion nicht verstanden: Was nützen mir denn die ganzen NotesInternational Properties wenn sie read only sind? Wie sage ich denn in Lotusscript dass ich meine Zahlen bitte in einem englischen Format hätte, um sie z.B. Java Kompatibel in einer XML Datei zu exportieren (ich denke da an etwas ähnliche wie die "locales" in Java). Geht das nur über CStr() und anschließendem Austauschen von Kommas und Punkten per String Funktionen kann man das auch eleganter über die NotesInternational Klasse lösen?

Danke im Voraus

Peter

P.S: Ich weiß die eigentliche Frage ging um Formelsprache, aber ich habe das Problem gerade in Lotusscript
Titel: Re: Notes und Kommastellenrechnen, schonmal erlebt???
Beitrag von: Otto am 27.02.07 - 12:26:22
@PeterD2

hilft Dir 'format(Datum, Formatstring)' ?

Gruß
Otto
Titel: Re: Notes und Kommastellenrechnen, schonmal erlebt???
Beitrag von: PeterD2 am 27.02.07 - 14:24:22
Nein, das nützt leider nichts, da die Format Funktion zwar z.B. den Punkt als Decimal Separator interpretiert, in der Ausgabe dann aber doch wieder das Komma verwendet. Dazu steht ja auch in der Hilfe:

"." = Decimal separator. The position of the decimal separator in fmt. Unless your formatting code includes a 0 immediately to the left of the decimal separator, numbers between -1 and 1 begin with the decimal separator,  The actual decimal separator used in the returned formatted value is the decimal separator specified in the operating system's international settings.
Schöne Grüße

Peter
Titel: Re: Notes und Kommastellenrechnen, schonmal erlebt???
Beitrag von: Otto am 28.02.07 - 11:21:33
Schon, aber mit etwas gutem Willen kann man sich daraus schon einen kleinen Einzeiler stricken, der einem das gewünschte Format liefert.

Gruß
Otto
Titel: Re: Notes und Kommastellenrechnen, schonmal erlebt???
Beitrag von: Glombi am 28.02.07 - 11:38:36
Man kann sich in einer Ansicht eine Spalte erzeugen, in der eine Zahl im benutzerdefinierten Format angezeigt wird.
Titel: Re: Notes und Kommastellenrechnen, schonmal erlebt???
Beitrag von: PeterD2 am 28.02.07 - 17:00:59
Ja Danke, aber mein (periodischer) Agent soll einfach auf unprocessedDocuments arbeiten. Eine eigene Ansicht nur zum Konvertieren des Zahlenformates ist bei den vielen hunderttausend Dokumenten in der Datenbank sicher kein guter Ansatz.

Da ist mir das kleine Skript auf der ersten Seite dieses Threads schon lieber. Dass es mit Tricks (zur Not eben mit String Funktionen) schon möglich ist ein Komma durch einen Punkt zu ersetzen ist mir schon klar. Ich wollte eigentlich nur fragen ob es irgendwelche Standardfunktionen gibt, bei denen man Internationale Einstellungen z.B. im Rahmen eines Skripts auch SETZEN kann. Das hätte mir bei meinem XML Export manches vereinfacht.

Schöne Grüße

Peter