Hmmm..skumt..måhända kan det vara ett internt precisionsproblem, beroende på att Number-typen är så allomspännande (fungerar ju som flyttal också..). I AS3.0 kan man använda typen int i stället.
var l:Number=Number("" + pile*.num);*
2 svar · 387 visningar · startad av Blixtsystems
Denna kod:
var l:Number=pile[i].num;
trace("num:"+l);
var j:Number=0;
for(j=0;j<l;j++){
trace("push:"+pile[i].value+", j:"+j+", l:"+l+", j < l:"+(j<l));
trace("typeof j:"+typeof(j)+", typeof l:"+typeof(l));
}
ger denna output:
num:3
push:0.05, j:0, l:3, j < l:true
typeof j:number, typeof l:number
push:0.05, j:1, l:3, j < l:true
typeof j:number, typeof l:number
push:0.05, j:2, l:3, j < l:true
typeof j:number, typeof l:number
push:0.05, [b][3][red]j:3, l:3, j < l:true[/red][/3][/b]
typeof j:number, typeof l:number
Testar jag istället med att köra:
var l:Number=3;
trace("num:"+l);
var j:Number=0;
for(j=0;j<l;j++){
trace("push:"+pile[i].value+", j:"+j+", l:"+l+", j < l:"+(j<l));
trace("typeof j:"+typeof(j)+", typeof l:"+typeof(l));
}
Så får jag:
num:3
push:5, j:0, l:3, j < l:true
typeof j:number, typeof l:number
push:5, j:1, l:3, j < l:true
typeof j:number, typeof l:number
push:5, j:2, l:3, j < l:true
typeof j:number, typeof l:number
Alltså...värdet av "pile.num" är av typen nummer med värdet 3, men ändå så anser Flash att det är mindre än 3.
Ändrar jag så jag hårdkodar det till 3 så anser Flash att det inte är mindre än 3.
"l" och "j" är varibler deklarerade lokalt i en funktion.
Detta händer inte vanligtvis utan vanligtvis fungerar det som väntat...exempel på hur det ser ut då jag kör hela funktionen med lite olika värden:
num:3
push:0.01, j:0, l:3, j < l:true
typeof j:number, typeof l:number
push:0.01, j:1, l:3, j < l:true
typeof j:number, typeof l:number
push:0.01, j:2, l:3, j < l:true
typeof j:number, typeof l:number
num:3
push:0.05, j:0, l:3, j < l:true
typeof j:number, typeof l:number
push:0.05, j:1, l:3, j < l:true
typeof j:number, typeof l:number
push:0.05, j:2, l:3, j < l:true
typeof j:number, typeof l:number
push:0.05, j:3, l:3, j < l:true
typeof j:number, typeof l:number
num:1
push:0.5, j:0, l:1, j < l:true
typeof j:number, typeof l:number
num:2
push:1, j:0, l:2, j < l:true
typeof j:number, typeof l:number
push:1, j:1, l:2, j < l:true
typeof j:number, typeof l:number
num:1
push:5, j:0, l:1, j < l:true
typeof j:number, typeof l:number
num:2
push:100, j:0, l:2, j < l:true
typeof j:number, typeof l:number
push:100, j:1, l:2, j < l:true
typeof j:number, typeof l:number
num:3
push:1000, j:0, l:3, j < l:true
typeof j:number, typeof l:number
push:1000, j:1, l:3, j < l:true
typeof j:number, typeof l:number
push:1000, j:2, l:3, j < l:true
typeof j:number, typeof l:number
Om någon har en idé om hur detta är möjligt vorde det kanon, men jag är mest ute efter medlidande
Hmmm..skumt..måhända kan det vara ett internt precisionsproblem, beroende på att Number-typen är så allomspännande (fungerar ju som flyttal också..). I AS3.0 kan man använda typen int i stället.
var l:Number=Number("" + pile*.num);*
Det verkar som du har rätt.
Jag häll på och mixtrade lite och det funkar att omvandla värdet till en sträng och tillbaka eller att köra Math.round