Autor Thema: Probleme mit der mod-Funktion  (Gelesen 2764 mal)

jkoe

  • Gast
Probleme mit der mod-Funktion
« am: 20.06.12 - 15:19:31 »
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

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: Probleme mit der mod-Funktion
« Antwort #1 am: 20.06.12 - 15:31:35 »
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
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Offline Fineas

  • Aktives Mitglied
  • ***
  • Beiträge: 145
  • Geschlecht: Männlich
  • PCLP Dev/Admin 5,6,7,8
Re: Probleme mit der mod-Funktion
« Antwort #2 am: 20.06.12 - 15:33:53 »
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

  • Gast
Re: Probleme mit der mod-Funktion
« Antwort #3 am: 20.06.12 - 15:44:06 »
@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

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Probleme mit der mod-Funktion
« Antwort #4 am: 20.06.12 - 17:55:19 »
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
HTH
Roland
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

jkoe

  • Gast
Re: Probleme mit der mod-Funktion
« Antwort #5 am: 02.07.12 - 13:46:23 »
@pram

Hallo Roland, vielen Dank für die kurzfristige Lösung, das Script funktioniert wie es soll

Jo

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz