Autor Thema: Umwandlung in Dezimalzahl  (Gelesen 4820 mal)

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Umwandlung in Dezimalzahl
« am: 09.10.08 - 09:16:40 »
Moin,moin alle zusammen,

folgende Konstellation:

Ich bekomme von einem Fremdsystem folgende strings, die ich in Dezimalzahlen umwandeln müsste:

"000000129-" oder
"000000129 "

Die " sind nur zur Verdeutlichung, dass bei positiven Zahlen an letzter Stelle ein Leerstring ist.

Die letzten beiden Ziffern stellen die Nachkommazahlen dar.

Es handelt sich also um die Werte -1.29 bzw. 1.29.

Irgendwie steh ich da im Moment voll auf dem Schlauch.

Hat jemand nen Ansatz, wie ich die Strings am Besten umwandeln kann?

Gruß
Demian
Gruß
Demian

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Umwandlung in Dezimalzahl
« Antwort #1 am: 09.10.08 - 09:17:29 »
Formelsprache, LotusScript, JavaScript oder Java ?
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Re: Umwandlung in Dezimalzahl
« Antwort #2 am: 09.10.08 - 09:19:08 »
Sorry, ganz vergessen: Vorzugsweise in Script.
Gruß
Demian

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Umwandlung in Dezimalzahl
« Antwort #3 am: 09.10.08 - 09:20:47 »
Na MId$ und Right$, String auseinanderschneiden und dann zusammenbauen.
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Re: Umwandlung in Dezimalzahl
« Antwort #4 am: 09.10.08 - 09:37:14 »
Moin,moin,

ich habe da nur das Problem mit den führenden Nullen. Insbesondere wenn die erste Vorkommazahl auch ne Null ist.

Hier mal mein bisheriger Code:

Function Sum(SumLine As String) As Currency
   Dim Zeros As Integer
   Dim PreDecimalPosition As String
   Dim DecimalPlace As String
   Dim SubTotal As String
   Dim i As Integer
   
   For i = 1 To 9
      If Mid(SumLine, i, 1) = 0 Then
         Zeros = Zeros + 1
      Else
         Exit For
      End If
   Next i
   
   If Zeros > 6 Then Zeros = 6
   
   PreDecimalPosition = Mid(SumLine, Zeros + 1, 7 - Zeros)
   DecimalPlace = Mid(SumLine, 10 - Zeros + 1, 2)
   SubTotal = Cstr(PreDecimalPosition & "," & DecimalPlace)
   
   If Right(SumLine, 1) = "-" Then
      Sum = Format(SubTotal,"Currency") * -1
   Else
      Sum = Format(SubTotal,"Currency")
   End If
End Function


Je länger ich da drauf guck, desto weniger Durchblick hab irgendwie. Irgendwie haperts bei dem

if Zeros > 6 und dem PreDecimalPosition.

Gruß
Demian

Gruß
Demian

klaussal

  • Gast
Re: Umwandlung in Dezimalzahl
« Antwort #5 am: 09.10.08 - 09:48:31 »
Warum nimmst Du nicht einfach die linken neun Stellen, haust die in ein Zahlenfeld rein und anschliessen Division durch 100 ? Dann je nach der rechten Stelle * (-1) oder nicht.

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Umwandlung in Dezimalzahl
« Antwort #6 am: 09.10.08 - 09:52:47 »
Code
	Dim zahlen(1) As String
	Dim temp As String
	Dim negativ As Boolean
	Dim nachkomma As String
	Dim vorkomma As String
	Dim offset As Integer
	Dim laenge As Integer
	Dim ergebnis As Double
	
	zahlen(0) = "000000129-"
	zahlen(1) = "000000129 "
	
	Forall zahl In zahlen
		laenge = Len(zahl)
		temp = Right(zahl, 1)
		If( temp = "-" ) Then
			negativ = True
			offset = 3
		Else
			negativ = False
			offset = 2
		End If
		
		nachkomma = Mid$(zahl, laenge - offset, 2)
		vorkomma = Left(zahl, laenge - offset)
		
		ergebnis = Cdbl( Cstr( Cint(vorkomma)  )  & "," & Cstr( Cint(nachkomma) )  )
		If (negativ) Then
			ergebnis = ergebnis * -1
		End If
		
		Msgbox  ergebnis  
		
	End Forall
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Glombi

  • Gast
Re: Umwandlung in Dezimalzahl
« Antwort #7 am: 09.10.08 - 09:56:27 »
Zitat
ergebnis = Cdbl( Cstr( Cint(vorkomma)  )  & "," & Cstr( Cint(nachkomma) )  )

Mit String Operationen wäre ich vorsichtig. Wenn es schon sein muss, dann würde ich das Trennzeichen für den Dezimalseparator aus den Betriebssystemeinstellungen lesen:

DecimalSep
Read-only. The decimal separator in number format, for example, the decimal point.
string = notesInternational.DecimalSep


Bsp. aus der Hilfe
Dim session As New NotesSession
Dim international As NotesInternational
Set international = session.International
Messagebox international.CurrencyDigits,, _
"Number of decimal digits"
Messagebox international.DecimalSep,, "Decimal separator"
Messagebox international.ThousandsSep,, "1000s separator"
If international.IsCurrencyZero Then
  Messagebox "Yes",, "Leading zero?"
Else
  Messagebox "No",, "Leading zero?"
End If

Andreas

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Umwandlung in Dezimalzahl
« Antwort #8 am: 09.10.08 - 09:58:25 »
Ja wollte ich eh noch, hab dann aber drauf vergessen. Danke für den Nachtrag.
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

klaussal

  • Gast
Re: Umwandlung in Dezimalzahl
« Antwort #9 am: 09.10.08 - 10:07:13 »
Der Offset muss jedesmal 2 sein, sonst stimmt das Ergebnis nicht !!

klaussal

  • Gast
Re: Umwandlung in Dezimalzahl
« Antwort #10 am: 09.10.08 - 10:12:32 »
Code
Dim zahlen(1) As String
	Dim temp As String
	Dim negativ As Boolean
	Dim vorkomma As String
	Dim offset As Integer
	Dim laenge As Integer
	Dim ergebnis As Double
	
	zahlen(0) = "000000129-"
	zahlen(1) = "000000129 "
	
	Forall zahl In zahlen
		laenge = Len(zahl)
		temp = Right(zahl, 1)
		If( temp = "-" ) Then
			negativ = True
		Else
			negativ = False
		End If
		
		vorkomma = Left(zahl, laenge - 1)
		ergebnis = Cdbl( vorkomma) 
		ergebnis = ergebnis / 100
		
		If (negativ) Then
			ergebnis = ergebnis * -1
		End If
		
		Msgbox  ergebnis  
		
	End Forall

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Re: Umwandlung in Dezimalzahl
« Antwort #11 am: 09.10.08 - 10:23:54 »
Erstmal vielen Dank für die vielen Antworten.

Ich habe mich letztlich für den Code von Klauss entschieden, da er der kürzeste ist.

Forall Zahl in Zahlen <- das sowas geht, war mir gar nicht bewusst. Ich war der Meinung Forall funktioniert nur mit "echten" Objekten, also sowas wie

Forall Items in Doc.Items oder so. Wieder was gelernt.

Das mit den Betriebsystemeinstellungen ist auch eine feine Sache. Aber da wir keinerlei Zweigstellen im Ausland haben und auch nicht glaube das das so schnell passieren wird, werde ich das erstmal nicht verwenden.

Nochmals vielen vielen Dank euch allen.

War da echt schon am Verzweifeln mit den Nullen.

Gruß
Demian

Gruß
Demian

Offline Pyewacket

  • Senior Mitglied
  • ****
  • Beiträge: 310
  • Geschlecht: Männlich
Re: Umwandlung in Dezimalzahl
« Antwort #12 am: 09.10.08 - 11:25:17 »
Unter der Voraussetzung dass das Format immer mindestens 3 Ziffern und Rechts eine Leerstelle oder ein Minuszeichen enthält lässt sich das auch so machen:

    Dim s As New NotesSession
   
   Dim Eingabe As String    ' Der Eingabewert
   
   Dim ausgabe As Currency   ' Der Ausgabewert
   
   
   Dim w1 As String      ' Arbeitsfeld Vorzeichen
   Dim w2 As String      ' Arbeitsfeld Vorkommastellen
   Dim w3 As String      ' Arbeitsfeld Dezimaltrennzeichen
   Dim w4 As String      ' Arbeitsfeld nachkommastellen
   Dim w5 As String      ' Arbeitsfeld für Zusammenbau
   
   w1=Right(Eingabe,1)            ' Vorzeichen '-' oder ' '
   
   w2=Left(Eingabe, Len(Eingabe)-3)   ' Die vorkommastelle
   
   w3=s.International.DecimalSep      ' das aktuelle Dezimaltrennzeichen
   
   w4 =  Mid(Eingabe, Len(Eingabe)-2,2) ' die zwei Dezimalstellen
   
   
   
   w5= w1 + w2 + w3 + w4          ' Alles aneinanderhängen zu ein Zeichenkette
   
   Ausgabe=Ccur( w5)            ' Umwandeln in Zieltyp
ATOS.org - Feel the music!

Offline Pyewacket

  • Senior Mitglied
  • ****
  • Beiträge: 310
  • Geschlecht: Männlich
Re: Umwandlung in Dezimalzahl
« Antwort #13 am: 09.10.08 - 11:28:04 »
Da die Zahlen vermutlich mal Geldbeträge darstellen sollen habe ich für das Ausgabefeld als Typ Currency genommen.  Double als Feldtyp ist dafür total ungeeignet.
ATOS.org - Feel the music!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz