| |
Fragen & Antworten rund um sev-KomponentensevDTA40: Rundungsproblem in DTA_SumValue | | | Autor: Wolfgang Schwarz | Datum: 08.12.21 23:23 |
| Hallo Dieter,
beim Abrufen der Summe erhalte ich
- aus DTA_SumValue "86234,0599999999"
- Muss aber "86234,06"
lauten.
Dadurch schlägt meine Kontroll-Rechnung fehl.
Getestet mit
- v4.0.0.3
- v4.0.0.5
???
Wolfgang Schwarz | |
Re: Fehler tritt immer noch auf | | | Autor: Wolfgang Schwarz | Datum: 16.12.21 12:06 |
| Entschuldigung hab mich vertippt:
aus meinem LOG:
Err> 16.12.2021 11:28:01,12109 SEPA-Kontrollsummen-Fehler: Anzahl_Datensaetze_Ausg = 38
Err> 16.12.2021 11:28:01,12109 SEPA-Kontrollsummen-Fehler: Anzahl_Datensaetze_Pruf = 38
Err> 16.12.2021 11:28:01,12109 SEPA-Kontrollsummen-Fehler: Summe__Betraege____Ausg = 215687360
Err> 16.12.2021 11:28:01,12109 SEPA-Kontrollsummen-Fehler: Summe__Betraege____Pruf = 215687359
- 2156873,59 ist der Wert der direkt aus DTA_SumValue kommt und den ich mal 100 nehme
- 215687360 ist der Wert den ich in einer Double-Variable addiere
ich addiere nur Ganzzahlen ! ( 1 EUR = 100)
DTA_SumValue = 2156873,59 ist falsch, muss 2156873,60 lauten !
Wolfgang Schwarz
Beitrag wurde zuletzt am 16.12.21 um 12:19:55 editiert. | |
Re: Fehler tritt immer noch auf | | | Autor: Dieter (Moderator) | Datum: 18.12.21 08:10 |
| Hallo Wolfgang,
also ich kann das Problem partout nicht nachstellen.
Kleines Beispiel; so in etwa, wie ich mir das bei dir vorstelle mit den Ganzzahlen:
Dim Value As Long ' Ganzzahl (SEPA-Betrag)
Dim sValue As String ' Übergabe als String an die DLL-Funktion
Dim SumCheck As Long ' Summe der Ganzzahlen
Dim SumValue As Double ' Rückgabe Gesamtsumme von der DLL
...
' Test
For i = 1 To 2027
Value = i
sValue = Replace(FormatNumber(Value / 100, 2, , , vbFalse), ",", ".")
SumCheck = SumCheck + Value
Result = sevDTA_FileAddRec(fHandle, "0001-01", sValue, "Name " & CStr(i), _
"DExx 0000 0000 0000 0000 00", "", "Rechnung " & CStr(i), _
Format$(i, "0000"), Format$(Now, "dd.mm.yyyy"))
Next i
...
SumValue = DTA_SumValue()
Debug.Print SumValue, SumCheck ' 20553,78 2055378 Das Ganze lässt sich mit beliebigen Schleifendurchläufen testen.
DTA_SumValue() gibt immer das korrekte Ergebnis zurück.
Frage: Wie genau übergibst du den Betrag an die DLL?
D.h: Wie wandelst du den Ganzzahlwert in xxx.xx um ?
_________________________
Professionelle Entwicklerkomponenten
www.tools4vb.de | |
Re: Fehler tritt immer noch auf | | | Autor: Wolfgang Schwarz | Datum: 18.12.21 08:41 |
| Dieter schrieb:
Frage: Wie genau übergibst du den Betrag an die DLL?
D.h: Wie wandelst du den Ganzzahlwert in xxx.xx um ?
Hallo Dieter,
schön das du noch beim Thema bist.
Das mit der Betragsübergabe vermutest du schon richtig.
Den Betrag hab ich als Double und wandle diesen in einen String nach dem Muster
'
' Abbuchungs- bzw. Überweisungsbetrag in EUR mit Punkt als
' Dezimaltrennzeichen (ohne TausenderGruppenZeichen)
'
svBetrag_m2NK = xsNumFormat("########0.00", dvBetrag) dvBetrag = 123456
svBetrag_m2NK = "1234,56"
Mein 'ungarisch' sagt mir das
- dvBetrag ein Double ist
- svBetrag_m2NK ein String ist
'xsNumFormat' ist meine eigene Format-Routine aus Zeiten wo es 'FormatNumber' noch nicht gab,
ausserdem traue ich den VB-Flieskomma-Funktionen sowieso nicht.
Gerade nochmal beim Kollegen nachgefragt, von ca. 100 Anwender die das am 16.12.2021 benutzt haben gab es an der Hotline nur *eine* Beschwerde darüber.
Glaskugel:
Kann es sein das das Problem nur bei großen Beträgen auftritt ?
Die Lastschriftsumme war in dem Fall 2,1 Mio EUR !
Wolfgang Schwarz | |
Re: Fehler tritt immer noch auf | | | Autor: Wolfgang Schwarz | Datum: 18.12.21 09:00 |
| nur noch ein Strohhalm:
ich sehe in deinem Code kein 'DTA_FileEnd'
Wolfgang Schwarz | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Neu! sevPopUp 2.0
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere Infos
|