Autor Thema: Java Sript Multiplikation mit z. B. 1.45"  (Gelesen 5053 mal)

Offline entertainer1105

  • Frischling
  • *
  • Beiträge: 33
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
Java Sript Multiplikation mit z. B. 1.45"
« 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.  ???

Marinero Atlántico

  • Gast
Re: Java Sript Multiplikation mit z. B. 1.45"
« Antwort #1 am: 20.04.05 - 13:58:34 »
Ich glaub deutsches Notes akzeptiert möglicherweise nur , und nicht .

Glombi

  • Gast
Re: Java Sript Multiplikation mit z. B. 1.45"
« Antwort #2 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

Offline entertainer1105

  • Frischling
  • *
  • Beiträge: 33
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
Re: Java Sript Multiplikation mit z. B. 1.45"
« Antwort #3 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 ;
   
    }
}


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Java Sript Multiplikation mit z. B. 1.45"
« Antwort #4 am: 20.04.05 - 17:14:54 »
Ist localFactor denn ein Textfeld ? Eigentlich könnte es doch nur in diesem Falle scheppern.

Bernhard

Marinero Atlántico

  • Gast
Re: Java Sript Multiplikation mit z. B. 1.45"
« Antwort #5 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.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Java Sript Multiplikation mit z. B. 1.45"
« Antwort #6 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

Marinero Atlántico

  • Gast
Re: Java Sript Multiplikation mit z. B. 1.45"
« Antwort #7 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>

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Java Sript Multiplikation mit z. B. 1.45"
« Antwort #8 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

Marinero Atlántico

  • Gast
Re: Java Sript Multiplikation mit z. B. 1.45"
« Antwort #9 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
« Letzte Änderung: 21.04.05 - 00:04:33 von Marinero Atlántico »

Offline entertainer1105

  • Frischling
  • *
  • Beiträge: 33
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
Re: Java Sript Multiplikation mit z. B. 1.45"
« Antwort #10 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.....

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re: Java Sript Multiplikation mit z. B. 1.45"
« Antwort #11 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)
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Marinero Atlántico

  • Gast
Re: Java Sript Multiplikation mit z. B. 1.45"
« Antwort #12 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

Glombi

  • Gast
Re: Java Sript Multiplikation mit z. B. 1.45"
« Antwort #13 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

Marinero Atlántico

  • Gast
Re: Java Sript Multiplikation mit z. B. 1.45"
« Antwort #14 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.

Offline entertainer1105

  • Frischling
  • *
  • Beiträge: 33
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
Re: Java Sript Multiplikation mit z. B. 1.45"
« Antwort #15 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

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz