Javascript entier long
J'en ai vu un de la plus étrange des choses en javascript.
Le côté serveur (printemps):
@RequestMapping(value = "/foo", method = RequestMethod.GET)
@ResponseBody
public Long foo() {
return 793548328091516928L;
}
Je retourner une seule valeur de type long et de:
$.get('/foo').done(function(data){
console.log(data);
});
Il représente l'entier long comme "793548328091516900" remplacement (arrondi en effet) les deux derniers chiffres avec des 0. Lorsque je fais cette requête GET à partir de n'importe quel barre d'adresse du navigateur, le nombre représenté correctement; donc c'est un js problème, à mon avis.
De retourner une chaîne de caractères au lieu de long à partir du serveur et de le manipuler avec:
var x = new Number(data).toFixed();
évidemment une solution. Mais je ne suis pas la chance que j'ai de gérer un complexe POJO (converti en JSON) dont certains champs (certains sont imbriquées) sont tapés avec java.lang.Long
type. Si j'essaie de lancer ce POJO à un autre objet, ne pas avoir des champs tapé Long, c'est évidemment lourd.
Est qu'il ya une solution à cet obstacle de façon plus claire?
Vous devez vous connecter pour publier un commentaire.
En Java, vous avez 64 bits entiers, et c'est ce que vous êtes en utilisant.
En JavaScript, tous les nombres sont 64 bits des nombres à virgule flottante. Cela signifie que vous ne pouvez pas représenter en JavaScript tout le Java longs. La taille de la mantisse est d'environ 53 bits, ce qui signifie que votre numéro de
793548328091516928
, ne peuvent pas être exactement représenté comme un nombre JavaScript.Si vous avez vraiment besoin pour faire face à de tels chiffres, vous avez à les représenter d'une autre manière. Cela pourrait être une chaîne ou une représentation spécifique comme un chiffre de tableau. Certains "grands nombres" les bibliothèques sont disponibles en JavaScript.
Peut être en retard, mais certainement l'aide d'autres personnes qui exécutent cette situation première fois.
J'ai trop envie de certains calculs sur des grands nombres en JavaScript. Il y a beaucoup de bibliothèques disponibles pour faire face à de tels chiffres. Mais la plupart d'entre eux pourraient perdre beaucoup de votre temps.
Ici, https://github.com/peterolson/BigInteger.js, direct, complet(pour les non nœud de l'environnement et de node JS environnements), et la solution de travail pour toutes les opérations sur un grand nombre disponible.
ou trouver du simple et de l'échantillon de travail extrait de code HTML qui calcule modulo/reste,