1
votes

Je ne peux pas obtenir le bon numéro uint32 en javascript

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.


1 commentaires

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.


3 Réponses :


1
votes

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)


0 commentaires

2
votes

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


0 commentaires

1
votes

Vous ne pouvez pas convertir 431430059159441001 en entier non signé dans . 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)


0 commentaires