2013-05-21 18 views
7

Jeśli muszę, powiedzmy, znaleźć część całkowitą i ułamkową część liczby w module asm.js, jak to zrobić? Żadna z standard operators nie konwertuje pomiędzy typami intish i double; nawet Math.floor zwraca double, a jego wynik nie może być wymuszony na int.Konwersja między int [ish] i podwójnym [ish] w asm.js

var floor = stdlib.Math.floor; 

function(n) { 
    n = +n; 
    var a = 0; 
    a = floor(n)|0; // fails: "Operands to bitwise ops must be intish" 
    var b = 0.0; 
    b = +(n-a); // would fail if compiler got to here 
    return; 
} 

Odpowiedz

10

Wiaczesław Jegorow (twitter: @mraleph) mówi: użyj ~~ zmusić do wew. Szczególny przypadek walidacji: http://asmjs.org/spec/latest/#unaryexpression

a = ~~floor(n); // success! 
+2

Zauważ, że niedawne buduje FF (nightly kanał) wymaga '~~ + piętro (n)', lub czasami '~~ + piętro (n) | 0'. – ZachB