Domino 9 und frühere Versionen > ND9: Entwicklung
Issue when converting Text to Number
eknori (retired):
Ich hätte da gerne mal ein Problem ...
Folgendes Szenario.
In einer Maske ist die Quota in einem Text Item gespeichert. der Wert dort ist "700.0"
LS Code liest den Wert aus und macht ein Cast nach Long zur Weiterverarbeitung.
Dummerweise kommt beim Cast immer 7000 raus. ( Egal, ob CInt, CLng oder CDbl )
Das führt natürlich zu lustigen Ergebnissen.
Man kann übrigens beliebig viele Punkte in den String einfügen; es kommt immer 7000 raus
Ist das wirklich richtig so? Oder ein Bug im LS?
Keydins:
Ändert sich das Verhalten, wenn man im Betriebssystem die engliche Interpunktion für Zahlen aktiviert? In good 'ol germany ist der '.' ja nur ein Marker für 1.000-Schritte und wird deshalb vielleicht beim Konvertieren ignoriert.
Gruß
Dirk
eknori (retired):
Nein, keine Änderung. Wir haben das Verhalten auf unterschiedlichen Systemen mit unterschiedlichen Spracheinstellungen beobachtet
eknori (retired):
Ersetzt man den Punkt durch ein Komma, dann funktioniert es. So ein Mist.
Tode:
Das ist eine wirklich hässliche Sache, über die ich auch schon gestolpert bin: LotusScript verwendet hier die Einstellungen aus dem Betriebssystem (und zwar unabhängig davon, was man in den Regional- Settings eingestellt hat.
Deutsches Betriebssystem = , als Dezimaltrennzeichen und . als Tausender- Trennzeichen (der ignoriert wird).
Du musst quasi den "richtigen" Dezimaltrenner reinrechnen. Dazu verwendest Du genau das beobachtete Verhalten als Indikator:
--- Code: ---Dim strNumber as String
Dim lngNumber as Long
strNumber = "100.0"
lngNumber = Clng( strNumber )
if lngNumber = 100 then '- Trennzeichen ist .
strDecimal = "."
strThousand = ","
Else
strDecimal = ","
strThousand = "."
End If
--- Ende Code ---
Wenn Du jetzt sicher bist, dass im Textfeld immer der Punkt verwendet wird,
dann musst Du ja nur sowas tun:
--- Code: ---If strDecimal = "," then
'- falsche tausender- trennzeichen ersetzen
strNumber = Replace( strNumber, "," , "" )
'- falsches dezimal- trennzeichen ersetzen
strNumber = Replace( strNumber, "." , "," )
End If
--- Ende Code ---
Ich weiss, dass Du den Code jederzeit selbst aus dem Ärmel schütteln könntest, ist nur für denjenigen, der hier mal auf der Suche nach einer Lösung vorbeistolpert...
Aber um Deine Frage zu beantworten: "Bug" würde ich das nicht nennen, eher "Works as Designed" auch wenn das bedeutet, dass der Code bei gleicher Datenlage auf zwei verschiedenen Maschinen völlig unterschiedliche Ergebnisse liefert...
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln