Domino 9 und frühere Versionen > ND8: Entwicklung

Single Data-Typ und Mathematik

(1/1)

mind1:
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)

--- Ende Code ---

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


   

Charly77:
Hallo,

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

edit sagt es funktioniert, hab`s grade getestet.

mind1:
Tatsächlich, dat funktioniert :-)

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

Gruß, Bernd

Navigation

[0] Themen-Index

Zur normalen Ansicht wechseln