Autor Thema: Issue when converting Text to Number  (Gelesen 2607 mal)

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Issue when converting Text to Number
« am: 01.06.15 - 09:53:52 »
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?
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Keydins

  • Aktives Mitglied
  • ***
  • Beiträge: 163
  • Geschlecht: Männlich
Re: Issue when converting Text to Number
« Antwort #1 am: 01.06.15 - 10:04:54 »
Ä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
Gruß Dirk

Aktuelle Notesumgebung
~800 BasicClients 9.0.1 FP9 SHF55
  10 FullClients 9.0.1 FP7 SHF143
    7 DominoServer 9.0.1 FP9 HF 139 / 64 Bit

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Issue when converting Text to Number
« Antwort #2 am: 01.06.15 - 10:14:28 »
Nein, keine Änderung. Wir haben das Verhalten auf unterschiedlichen Systemen mit unterschiedlichen Spracheinstellungen beobachtet
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Issue when converting Text to Number
« Antwort #3 am: 01.06.15 - 10:18:07 »
Ersetzt man den Punkt durch ein Komma, dann funktioniert es. So ein Mist.
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Issue when converting Text to Number
« Antwort #4 am: 01.06.15 - 10:23:12 »
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

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

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...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Issue when converting Text to Number
« Antwort #5 am: 01.06.15 - 10:31:25 »
Danke, Thorsten.

habe es jetzt erst einmal so gelöst

Code
Function ConvertTextToNumber(szValue As String) As Integer
	ConvertTextToNumber = Cint(szValue)
	If Instr(szValue, ".") > 0 Then
		ConvertTextToNumber = Cint(Left( szValue, Instr(szValue, ".") - 1 ))
	End If
End Function

da es bei Komma Funktioniert und lediglich der Punkt Probleme bereitet.

Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Issue when converting Text to Number
« Antwort #6 am: 01.06.15 - 10:39:15 »
Wenn Dich nur der Integer- Part interessiert, dann ist das natürlich auch ausreichend...
Ach ja: Nur für die Akten:
Code
StrLeft( szValue, "." )
hätte auch gereicht statt Deines Instr- Konstrukts...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Thomas Schulte

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Issue when converting Text to Number
« Antwort #7 am: 01.06.15 - 10:40:36 »
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.
Ja über dieses Verhalten bin ich auch schon gestolpert.
Das Problem ist nur das es bei Code der auf Maschinen die mit unterschiedlichen OS Settings arbeiten (internationales Umfeld) nicht funktioniert. Dann muss man nämlich erst rausfinden wie die OS Settiings ausschauen um dann entsprechend zu verzweigen. Das ist hässlich.
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz