Dim dblvals() As Double = New Double() {71644667.7, 33795569.6} näe det är inte någe märkligt.. ...och detta är skälet till att man aldrig (ok, nästan aldrig) för flyttal ska skriva : En liten snabb kommentar i sammanhanget är att .NET har inbyggd funktionalitet för att kolla detta så att dte inte blir några datatypsmisstag.Varför sker detta? räknar .Net fel?
Dim dblResult As Double = 0
For Each dblVal As Double In dblvals
dblResult += dblVal
Next
Console.WriteLine(dblResult)
' resultatet blir : 105440237.30000001
' ganska märkligtSv: Varför sker detta? räknar .Net fel?
det är så exakt som datatypen double är..
vill du har mer exakta värden får du använda decimal istället..
skulle du använda tex "float" (single i vb?) så får du ännu sämre resultat...
//rogerSv: Varför sker detta? räknar .Net fel?
<code>
If f1=f2 Then
</code>
utan i stället jämföra med
<code>
If Abs(f1-f2)<0.0001 Then
</code>
Där 0.0001 givetvis är den nogrannhet som du eftersträvar i sammanhanget.
Bara ett litet tips på vägen...Sv: Varför sker detta? räknar .Net fel?
Längst upp i din klass, modul eller whatever skriver du "Option Strict On".
Om du dessutom besitter VS.NEt kan du ställa in det per projekt genom att gå in i Egenskaper för projektet och leta upp build under Common properties. Då finns möjlighet att ställa in Option Explicit, Strict och Binary compare.
//Mikael Sand
"En del av Ånge™"