J'essaye de convertir un long nombre en unité en JavaScript, mais le résultat je l'ai obtenu différent de celui que j'ai déjà en c #.
c #:
var arr =new Uint32Array(1); arr[0]=431430059159441001;//1570754176
js:
var tt=431430059159441001; var t=(UInt32)tt;//1570754153
tout organisme pourrait donc expliquer pourquoi il y a une différence.
3 Réponses :
Il ne s'agit pas de uints, mais de flotteurs. JavaScript utilise des nombres à virgule flottante et votre nombre dépasse la plage maximale d'entiers pouvant être représentés en toute sécurité:
console.log(431430059159441001)
C'est parce que votre littéral numérique est plutôt un entier de 64 bits, et cela ne peut pas être représenté dans les scripts Java standard Type de numéro . Le type de nombre est un nombre à virgule flottante de précision 64 bits, qui ne peut représenter que des valeurs entières jusqu'à environ 2 ** 53
. Je recommanderais donc de ne pas utiliser un nombre aussi grand littéral.
Un développement récent dans le monde JavaScript est BigInt s. Si vous pouvez vous permettre de les utiliser, alors votre code est facile à corriger:
var t = Number(BigInt.asUintN(32, 431430059159441001n)); console.log(t); // 1570754153
Vous ne pouvez pas convertir 431430059159441001
en entier non signé dans c # . La valeur maximale de UInt32
est 4294967295
. Ainsi, l'affectation var t = (UInt32) 431430059159441001;
donne une erreur du compilateur.
également 431430059159441001
est plus grande que la valeur maximale du nombre flottant (javascript contient un nombre au format flottant)
Votre code indique que
CS0221 La valeur constante «431430059159441001» ne peut pas être convertie en «uint» (utilisez la syntaxe «non cochée» pour remplacer)
. Veuillez mettre à jour votre question et ajouter des détails sur ce que vous faites réellement avec des exemples de travail.