Seite 1 von 1

Typ Konvertierung nach Currency mit negativen Werten ist defekt

Verfasst: Fr 20. Sep 2019, 15:07
von aladin
Hallo.

Bei meiner Umstellung von AOO auf LO (6.2.5.2) unter Gentoo Linux, habe ich festgestellt, das die Konvertierung von negativen Werten, zu Currency fehl schlägt.

Hier ein Stück Test-Code:

Code: Alles auswählen

Sub Test_CCur()
	Dim cErgebnis as Currency
	Dim sErgebnis as String
	Dim cWert1 as Currency
	Dim cWert2 as Currency
		
		cWert1=0
		cWert2=4.5
		
		cErgebnis=cWert1-cWert2
		sErgebnis=CStr(cErgebnis)
		
	print cErgebnis
	print CCur(sErgebnis)
End Sub
Kann jemand den Fehler bei sich nachvollziehen?

Gruß
Heiko

Re: Typ Konvertierung nach Currency mit negativen Werten ist defekt

Verfasst: Fr 20. Sep 2019, 15:23
von craig
Hallo Heiko,

Code: Alles auswählen

sErgebnis=CStr(cErgebnis)
CStr ist eine Umwandlung in einen String.
Strings kennen keine negativen Werte.

Statt:

Code: Alles auswählen

print CCur(sErgebnis)
Versuche dies:

Code: Alles auswählen

print CCur(cErgebnis)
Ausserdem ist eine Umwandlung nicht erforderlich, weil Du
im Deklarationsbereich bereits alles als Currency deklariert hast.
Deshalb sollte dies genügen:

Code: Alles auswählen

print cErgebnis

Re: Typ Konvertierung nach Currency mit negativen Werten ist defekt

Verfasst: Fr 20. Sep 2019, 16:04
von aladin
Hallo craig.

Da hast Du mich völlig missverstanden.
Ich habe die Test-Routine bewusst so geschrieben, damit man den Fehler reproduzieren kann.

https://help.libreoffice.org/Basic/CCur ... Runtime/de

CCur sollte einen String in der Form "-4.5" in eine Currency-Variable wandeln können.
AOO konnte das fehlerfrei.
LO meckert.

Die Frage ist nun, ob das ein Bug ist. Ich würde sagen ja.

Kurz noch warum ich das brauche:
Der native MySQL-Treiber war schon unter AOO etwas seltsam was Datentypen angeht.
Eigentlich würde ich, wenn ich eine Currency-Variable füttern will, getFloat verwenden.

Code: Alles auswählen

	sSQL="select 0-5.2"
	oRecord=oResult(sSQL)
	While oRecord.next()
'		cErgebnis=oRecord.getFloat(1)
		sErgebnis=oRecord.getString(1)
	Wend

	print sErgebnis
	print cErgebnis
Nur hat das schon unter AOO und auch jetzt unter LO die Nachkommastellen abgeschnitten.
Wie ich gesehen habe wird an dem MySQL C-Treiber für LO gebaut und ich hoffe, dass das zukünftig besser funktioniert.

Aber CCur sollte trotzdem auch korrekt funktionieren.

Gruß
Heiko

Re: Typ Konvertierung nach Currency mit negativen Werten ist defekt

Verfasst: Fr 20. Sep 2019, 16:44
von craig
Hallo Heiko,

Ok.

Wie folgt:
  1. AOO 4.1.6 liefert mir bei Ausführung Deines Codes:
    • print cErgebnis = -4.5000
    • print CCur(sErgebnis) = -4.5000
    Beide Meldungen sind meiner Meinung nach falsch.
    Currency sollte auf die lokalen Währungseinstellungen zugreifen.
    Wenn deutsch, dann wäre diese Meldung richtig:
    -4,50 €
    Also, keine 4 Nachkommastellen und keinen Dezimaltrenner in Form eines Punktes.
  2. LibO 6.3.0.4 liefert mir bei Ausführung Deines Codes:
    • print cErgebnis = -4.5000
    • print CCur(sErgebnis) = Fehlermeldung: Datentypen unverträglich
    Beide Meldungen sind meiner Meinung nach falsch.
    • Currency sollte auf die lokalen Währungseinstellungen zugreifen.
      Wenn deutsch, dann wäre diese Meldung richtig:
      -4,50 €
      Also, keine 4 Nachkommastellen und keinen Dezimaltrenner in Form eines Punktes.
    • Fehlermeldung ist falsch, denn gemäß Hilfe:
      https://help.libreoffice.org/6.1/de/text/sbasic/shared/03100050.html hat geschrieben:Funktion CCur

      Konvertiert einen Zeichenketten- oder numerischen Ausdruck in einen currency-Ausdruck. Dezimaltrennzeichen und Währungssymbole werden aus dem Gebietsschema entnommen.
  3. LibO 6.4.0.0.alpha0+ (x64)
    Dasselbe Ergebnis wie Version 6.3.0.4
Heiko hat geschrieben:Die Frage ist nun, ob das ein Bug ist. Ich würde sagen ja.
Ich würde sagen, sowohl AOO und LibO haben diesbezüglich einen Bug.

Re: Typ Konvertierung nach Currency mit negativen Werten ist defekt

Verfasst: Fr 20. Sep 2019, 17:52
von aladin
Hallo Craig.

Danke fürs Aufklären!

Das sieht nach einer größeren Baustelle aus.
Dass AOO das Gebietsschema ignoriert hat, hatte ich gar nicht so registriert. Das war wohl mal geplant und ist nicht fertig geworden...

Gruß
Heiko