Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: entertainer1105 am 20.04.05 - 13:37:05

Titel: Java Sript Multiplikation mit z. B. 1.45"
Beitrag von: entertainer1105 am 20.04.05 - 13:37:05
Hallo,

ich schreibe gerade eine Web-Datenbank. In einer Maske soll unter "OnSubmit" ein ganzzahliger Wert ausgelesen werden und mit einer Real- Zahl (z.B. 1.45) multipliziert und in ein separates Feld geschrieben werden.
Bei der Vorschau in Notes bekomme ich die Fehlermeldung "Feld enthält falschen Wert / Nicht erkannte Zeichen hinter Zahl". Im Web passiert nichts, das Dokument wird noch nicht einmal gespeichert.
Wenn ich nur den Feldinhalt in das Zielfeld schreibe, ist alles okay.

Hilfe.

Danke.  ???
Titel: Re: Java Sript Multiplikation mit z. B. 1.45"
Beitrag von: Marinero Atlántico am 20.04.05 - 13:58:34
Ich glaub deutsches Notes akzeptiert möglicherweise nur , und nicht .
Titel: Re: Java Sript Multiplikation mit z. B. 1.45"
Beitrag von: Glombi am 20.04.05 - 14:02:01
Kannst Du mal den Code posten?

Das Dezimaltrennzeichen sollte / muss von der Ländereinstellung unabhängig sein. In LotusScript ist es der Punkt.

Andreas
Titel: Re: Java Sript Multiplikation mit z. B. 1.45"
Beitrag von: entertainer1105 am 20.04.05 - 17:04:36
Hallo Glombi,

hier nun der Quelltext:


if (document.forms[0].Lamph.value > 0)
{
   if (document.forms[0].Waehrung.value == "GBP")
   { 
    alert ("Wir sind in GB") ;
    // Der Wert Lamph wird vom Benutzer eingegeben, der localFactor wird aus einem Profildokument ausgelesen.
    // In diesem Wert steht z. Zt. die 1,45
    // Wenn der Wert "localFactor" einen ganzzahligen Wert hat, wird alles richtig ausgerechnet und auch gespeichert
    document.forms[0].EurLamph.value = document.forms[0].Lamph.value * document.forms[0].localFactor.value ;
   
    }
}

Titel: Re: Java Sript Multiplikation mit z. B. 1.45"
Beitrag von: koehlerbv am 20.04.05 - 17:14:54
Ist localFactor denn ein Textfeld ? Eigentlich könnte es doch nur in diesem Falle scheppern.

Bernhard
Titel: Re: Java Sript Multiplikation mit z. B. 1.45"
Beitrag von: Marinero Atlántico am 20.04.05 - 17:28:52
Normlerweise castet JavaScript die Daten richtig in den entsprechenden Typ. Du kannst aber mal einen expliziten Cast versuchen. Ich glaube das sähe so aus:
Code
document.forms[0].EurLamph.value = Cdouble(document.forms[0].Lamph.value) * Cdouble(document.forms[0].localFactor.value) ;
Danach mußt du aber noch das ungenaue Fliesskomma-Ergebnis auf 2 Stellen hinter KOmma runden.
Titel: Re: Java Sript Multiplikation mit z. B. 1.45"
Beitrag von: koehlerbv am 20.04.05 - 17:35:33
Genau dieses Casting brachte mich auf den Gedanken mit dem ggf. falschen Feldtyp. Wird gecastet, ist
5 * "2" = 10

5 * "2,45" führt aber zu einem Fehler, da statt Komma ein Pinkt erwwartet (irgendwo ist ja Schluss mit lustig - äh, casting).

Warten wir mal ab, was Miss entertainer dazu schreibt. Nur sie hat die Fakten ...

Bernhard
Titel: Re: Java Sript Multiplikation mit z. B. 1.45"
Beitrag von: Marinero Atlántico am 20.04.05 - 17:49:06
Mit Punkt geht es:
Code
<html>
<script>
simpleMath1 = 2.45 * 2;
alert ("simpleMath1=" + simpleMath1);
simpleMath2 = "2.45" * "2";
alert ("simpleMath2=" + simpleMath2);

</script>
</html>
Titel: Re: Java Sript Multiplikation mit z. B. 1.45"
Beitrag von: koehlerbv am 20.04.05 - 20:38:23
Logisch geht es mit dem Punkt, Axel. Davon reden wir doch die ganze Zeit.
Die Frage ist doch: Wie kommt (eventuell) das Komma da rein ? Nicht durch ein Zahlenfeld - daher auch meine Vermutung: Der Wert kommt aus einem Textfeld (generell übel in diesem Zusammenhang).

Bernhard
Titel: Re: Java Sript Multiplikation mit z. B. 1.45"
Beitrag von: Marinero Atlántico am 20.04.05 - 23:15:11

    // In diesem Wert steht z. Zt. die 1,45

Die Entertainerin hat ihn da eingetragen.
Der Witz scheint zu sein: JavaScript ist hinsichtlich des fractional separators nicht internationalisiert. Angeblich ist das für eine Webbrowser-Scriptsprache unsinnig, weil was so gelten --> der locale des Browsers, des Webservers? So ganz sehe ich das nicht sein, aber ich kann das mal bei Eric Pascarello im Javascript Forum posten.
Ein LotusNotes Client weiss ja, wie er das an die Länderversion anpasst. In Java gibt es da auch Unterstützung mit Locale und RessourceBundle. Sicherlich in jeder moderneren Programmierumgebung.
Ein Hack wäre wohl (nicht getestet) per JavaScript String-Funktionen das , in einen Punkt ersetzen und dann parseDouble(derGeaenderteWert)

Vorschläge:
http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=20&t=001996
Titel: Re: Java Sript Multiplikation mit z. B. 1.45"
Beitrag von: entertainer1105 am 21.04.05 - 09:03:14
Es handelt sich um ein Zahlenfeld. Ich habe mir gespeicherte Dokumente angeschaut und dort werden im Eigenschaftsfenster auch Zahlen angezeigt.
Im Augenblick habe ich noch zwei Probleme:
Da ich in der Original-Datenbank mit Profildokumenten arbeite muß ich dort in einem Zahlenfeld z. B. 1,45 eingeben. Da ich einen deutschen Client habe muß ich ein den Wert mit einem Komma eingeben. Das mag dann natürlich mein JavaScript nicht mehr.
Zweitens: wenn ich das JavaScript z. B. mit einem Multiplikator von 1.45 (feste Eingabe) ausführe und "88" eingebe, so rechnet er zwar den Wert richtig  aus, jedoch gibt der Client eine Fehlermeldung heraus "nicht erkannte Zeichen hinter Zahl" und speichert nicht und im Web bekomme ich den Fehler "HTTP interner Server Fehler" und es wird ebenfalls nicht abgespeichert.
Beides wird sicher mit dem "Komma" zu tun haben.
Wie kann man das Format vereinheitlichen, daß er nur noch das "."-Format benutzt??

So langsam bin ich ratlos.....
Titel: Re: Java Sript Multiplikation mit z. B. 1.45"
Beitrag von: animate am 21.04.05 - 09:38:05
ich vermute, dass

- Javascript erst nichts mit dem Komma, das aus Notes kommt anfangen kann

- Notes nichts mit dem Punkt, der von der Operation in Javascript zurückkommt anfangen kann

Du hast zwei Möglichkeiten wenn meine Vermutung richtig ist:

- du veränderst das Feld in Notes so, dass es statt Komma Punkt als Dezimaltrennzeichen nimmt.

- du machst eine spezielle JS-Funktion, die den Input aus Notes verändert (Komma durch Punkt ersetzen mit replace()), die Berechnung durchführt und das Ergebnis verändert (Punkt ducrh Komma ersetzen)
Titel: Re: Java Sript Multiplikation mit z. B. 1.45"
Beitrag von: Marinero Atlántico am 21.04.05 - 10:16:27
ich vermute, dass
yup. so sehe ich das auch.
Die Formatkonvertierung würde ich in Javascript durchführen.
Hier ist ein Beispiel für die entsprechende Funktion:
http://de.selfhtml.org/javascript/objekte/string.htm#replace
Titel: Re: Java Sript Multiplikation mit z. B. 1.45"
Beitrag von: Glombi am 21.04.05 - 10:26:11
Man muss es wohl zwingend in JavaScript machen, da Notes Zahlen immer in der gleichen Darstellung speichert, unabhängig davon was man unter benutzerdefiniert als Dezimaltrenner eingegeben hat. Denn das ist nur für die Anzeige.

Die JS Funktion replace setzt einen String voraus, d.h. die "Zahl" müsste erst in einen String konvertiert werden.
Da stellt sich die Frage, ob man nicht in Notes gleich ein Textfeld verwendet.

Andreas
Titel: Re: Java Sript Multiplikation mit z. B. 1.45"
Beitrag von: Marinero Atlántico am 21.04.05 - 10:39:31
Da stellt sich die Frage, ob man nicht in Notes gleich ein Textfeld verwendet.
Wieso?

Code
if (document.forms[0].Lamph.value > 0)
{
   if (document.forms[0].Waehrung.value == "GBP")
   { 
    alert ("Wir sind in GB") ;
    // Der Wert Lamph wird vom Benutzer eingegeben, der localFactor wird aus einem Profildokument ausgelesen.
    // In diesem Wert steht z. Zt. die 1,45
    // Wenn der Wert "localFactor" einen ganzzahligen Wert hat, wird alles richtig ausgerechnet und auch gespeichert

    valUS = document.forms[0].Lamph.value * formatUS(document.forms[0].localFactor.value) ;
document.forms[0].EurLamph.value = formatGerman(valUS);
   
    }
function String formatUS(String input) {
  return input.replace(/,/, ".");
}

function String formatGerman(String input) {
  return input.replace(/./, ",");
}
nicht getestet.
Ich würd die Funktionen formatUS und formatGerman nicht zu einer Funktion verdichten (was möglich wäre), da dies vermutlich unübersichtlich ist. formatUS und formatGerman sind klare Namen.
Besser vielleicht noch formatDecimalSeperatorUS und formatDecimalSeperatorGerman.
Titel: Re: Java Sript Multiplikation mit z. B. 1.45"
Beitrag von: entertainer1105 am 25.04.05 - 08:56:11
Hallo,

ich war ab Donnerstag Mittag nicht mehr im Büro... sonst hätte ich mich schon eher gemeldet.

Ich habe den Code von Marinero unter "OnSubmit" eingetragen, jetzt meckert er bei den beiden Functions : "JavaScript-Fehler / Fehler: ReferenceError: formatUS is not defined".

Muß der Code an einer anderen Stelle eingebunden werden oder muß noch etwas deklariert werden??

Danke für Eure Hilfe
Annette