Domino 9 und frühere Versionen > ND8: Entwicklung
Probleme mit der mod-Funktion
jkoe:
Hallo,
bei einer Berechnung für einen Kunden ist die verwendung eines Modulowertes vorgeschrieben.
das Problem ist die Größe des Dividenden : 21-stellige Zahl.
die Modfunktion bringt einen Fehler, sobald die die Stellen >17 sind.
wenn ich die die Modfunktion nachbilde, wandelt Notes den Wert immer in die 123e21 -Darstellung um und Funktionen wie z.B. fix greifen nicht.
Grundsätzlich sieht die Funktion in etwa so aus:
ModWert = Wert - (fix(Wert/33)) * 33
Wenn man die Formel in einzelne Schritte aufteilt, zeigt sich, das fix nicht greift bzw. der Gegentest mit fraction ergibt in diesem Bereich 0.
Zahlen in dieser Größenordnung scheinen durch die Umwandlung nicht mehr wie erwartet verarbeitet zu werden.
Als Formate habe ich mit dbl und variant getestet, alle anderen sind vom Wertebreich zu klein.
Vielleicht hat jemangd eine Idee, wo ich ansetzen könnte.
Danke
Jo
umi:
Ich denke da wirst Du mit LS nicht weiter kommen.
Da würde ich jetzt den Umweg über JAVA gehen. Die hat sicher irgendwelche Bibliotheken um auch mit Grossen Zahlen zu arbeiten.
LS2J ist da sicher eine Möglichkeit
Fineas:
Vielleicht hast Du noch etwas mehr Infos:
Wozu braucht man eine 21-stellige Zahl mit Modulo? Und Wieviele Stellen hat der Operator für gewöhnlich?
Vielleicht läßt sich das Ziel auf einem eleganteren Weg erreichen ...
Gruß, Heiko
jkoe:
@fineas:
Die Stelligkeiten ergaben sich aus der Kombination mehrerer Eingabewerte und sind nicht änderbar.
der Modulo-Wert ist Bestandteil einer Berechnung für eine Prüfziffer.
@umi:
Danke für die Idee, ich mache mich mal auf die Suche.
Jo
pram:
--- Code: --- '/**
' * Ermöglicht eine Modulo-Operation auf sehr große Zahlen, welche nicht mit den Standard LotusScript
' * Datentypen für numerische Werte durchgeführt werden kann (maximale LS Zahlengröße = 2^64 (4 Byte))
' * @see <a href="http://www.devx.com/tips/Tip/39012">Finding Modulos of a very large number</a>
' */
Public Function bigModulo(ByVal bigNumberStr As String, modulo As Long) As Long
Dim a As long
Do While Len(bigNumberStr) > 9 ' 9-stellige Zahlen unproblematisch
a = Val(Left$(bigNumberStr, 9))
If Abs(a) < Abs(modulo) Then Error 6
bigNumberStr = CStr(a Mod modulo) & Mid$(bigNumberStr, 10)
Loop
bigModulo = Val(bigNumberStr) Mod modulo
End Function
--- Ende Code ---
HTH
Roland
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln