Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: mind1 am 15.01.13 - 14:42:52

Titel: Single Data-Typ und Mathematik
Beitrag von: mind1 am 15.01.13 - 14:42:52
Hallo zusammen,

ich habe ein sehr seltsames Phänomen, bei dem ich einfach nicht weiter komme. In einer Anwendung müssen IP-Adressen in dezimale Werte umgerechnet werden. Das funktioniert ja nach der Formel

A*256^3+B*256^2+C*256^1+D*256^0

So weit so gut. Die Formel habe ich zunächst mit dem Datentyp Long ausprobiert, da funktionierte noch alles. Leider reicht der Typ nunmal nicht aus, um Zahlen bis 2^32 darzustellen, also habe ich zum Datentyp "Single" gewechelt.

Seit dem rechnet Notes aber falsch. Es geht um folgendes Script:

Code
strIP = "188.98.224.99"

	sngTmp1 = Csng(StrToken(strIP,".",1)) * 256 ^ 3

	sngTmp2 = Csng(StrToken(strIP,".",2)) * 256 ^ 2

	sngTmp3 = Csng(StrToken(strIP,".",3)) * 256
	
	sngTmp4 = CSng(StrToken(strIP,".",4))
	
	sngIp = sngTmp1 + sngTmp2 + sngTmp3 + sngTmp4
	
	Print "Ergebnis dezimal: " + CStr(Round(sngIP,0))
	Print "Rechnung ist aber: " + CStr(Round(sngTmp1,0)) + " + " + CStr(Round(sngTmp2,0)) + " + " + CStr(sngTmp3) + " + " + CStr(sngTmp4)

Ich habe schon viel getestet. Er verrechnet sich immer im letzten Schritt, also wenn sngTmp4 hinzugerechnet wird. Die Round-Befehle sind wegen der Darstellung als Text drin (sonst ist die Darstellung ala "e hoch irgedwas") und tun bei der Rechnung als solches nichts zur Sache.

Beispielrechnung: Bei der IP 188.98.224.99 wird das Ergebnis 3160596480 geliefert. Gerechnet wird 3154116608 + 6422528 + 57344 + 99. Das korrekte Ergebnis wäre also 3160596579.

Was passiert da? Bin für jeden Tipp zu haben!

Danke, Bernd


   
Titel: Re: Single Data-Typ und Mathematik
Beitrag von: Charly77 am 15.01.13 - 15:06:17
Hallo,

versuche statt Single mal den Currency, dann sollte das funktionieren.

edit sagt es funktioniert, hab`s grade getestet.
Titel: Re: Single Data-Typ und Mathematik
Beitrag von: mind1 am 15.01.13 - 15:24:23
Tatsächlich, dat funktioniert :-)

Vielen Dank für den Querdenker, den habe ich gebraucht...

Gruß, Bernd