Comment puis-je obtenir entiers et de fractions de double en JSP/Java?
Comment puis-je obtenir entiers et de fractions de double en JSP/Java ? Si la valeur est de 3,25 alors je veux obtenir fractional =.25
, whole = 3
Comment peut-on le faire en Java?
- Vous semblez avoir une idée inexacte de ce que la mantisse et l'exposant sont. Ils ne sont pas simplement "partie entière" et "partie fractionnaire". Voir en.wikipedia.org/wiki/Floating_point
- En fait j'ai lu autour de 5 messages avant d'aller "hé.. qui ne s'appelle pas un exposant'. Mon cerveau a jeté les mots et a commencé à résoudre le problème .. les mauvaises habitudes de lecture de la programmation des trucs a me donner 🙂
- Aussi, merci de reformuler la question de l'OP.. pour la postérité, entre autres raisons.
- Ressemble étrangement à un problème.
- ohh je vois. j'ai déjà demandé comment il obtient donc des résultats étranges
- Simplement, je ne veux pas savoir de cette école si c'est le cas.. trop petit pour l'exercice de toutes les cellules du cerveau. 🙂
- Garder le titre original sinon, la plupart des réponses ne faites pas de sens.
- Mes 5 lignes de code fonctionne pour tous les cas, prendre un coup d'oeil ici stackoverflow.com/a/56413634/8253662
Vous devez vous connecter pour publier un commentaire.
Google pourrait vous aider si vous avez utilisé les bons termes de recherche "obtenir les fractions et de toute la partie de double java"
http://www.java2s.com/Code/Java/Data-Type/Obtainingtheintegerandfractionalparts.htm
Sorties:
2.3
, mais sûrement pas2.3
. Et il n'y a rien de mal à la sortie, sauf si vous voulez beaucoup plus que 10 valable chiffres. Tous vous avez besoin est un peu de l'arrondissement à chaque sortie (par exemple, le format%.9f
), qui est généralement moins de douleur queBigDecimal
. Le seul problème ici, c'est le trop-plein.(long)1.0e100
vous obtiendrez 0. Beaucoup de fois vous avez besoin du double de la valeur simplement "au sol" pour lequel il n'existefloor()
. Si vous voulez à la fois intégré et d'une fraction des pièces, utilisezmodf()
. Vraiment, c'est une mauvaise réponse.%
à dire modulo (-3.25 % 1 == 0.75
) et d'autres, tels que Java, Fortran, C et C++, l'utilisation%
pour signifier reste (-3.25 % 1 == -0.25
). WindRider peut-être tapé dans un Python REPL pour l'opportunisme, mais cette réponse est trompeuse, car cette question est au sujet de la JVM.Depuis 1 ans, la question a été soulevée par quelqu'un qui a corrigé la question, et cette question est balisé avec jsp, et personne ici n'a été en mesure de donner une JSP réponse ciblée, voici ma JSP-contribution ciblée.
Utilisation JSTL (il suffit de déposer jstl-1.2.jar dans
/WEB-INF/lib
) fmt taglib. Il y a un<fmt:formatNumber>
balise qui fait exactement ce que vous voulez et dans un très facile avec l'aide demaxFractionDigits
etmaxIntegerDigits
attributs.Voici un SSCCE, il suffit de copier n " coller'n'run il.
De sortie:
Que c'est. Pas besoin de massage avec l'aide de matières premières de code Java.
L'original de la question posée pour l'exposant et la mantisse, plutôt que de la fraction, et toute la partie.
Pour obtenir l'exposant et la mantisse d'un double, vous pouvez le convertir dans le La norme IEEE 754 représentation et d'en extraire les bits comme ceci:
Logique principale, vous devez d'abord trouver du nombre de chiffres après le point décimal.
Ce code fonctionne pour un certain nombre jusqu'à 16 chiffres. Si vous utilisez BigDecimal vous pouvez l'exécuter juste pour jusqu'à 18 chiffres. mettre la valeur d'entrée (votre numéro) à la variable "num", ici, à titre d'exemple, j'ai codé en dur elle.
Ne sais pas si c'est plus rapide mais je suis en utilisant
La mantisse et l'exposant de l'IEEE double nombre à virgule flottante sont les valeurs telles que
si la mantisse est de la forme 0.101010101_base 2 (c'est à dire sa plus sigificant peu décalée après le binaire point) et l'exposant est ajusté de biais.
Depuis la 1.6, java.lang.Les mathématiques fournit une méthode pour obtenir la neutralité de l'exposant (appelé getExponent(double))
Cependant, les chiffres que vous proposez sont de l'intégrale et de la fraction d'un nombre, qui peut être obtenu à l'aide de
si vous vous voulez traiter les nombres négatifs différemment
(floor(-3.5) == -4.0)
, selon lesquelles vous voulez les deux parties.J'avais suggèrent fortement que vous n'appelez pas de ces mantisse et l'exposant.
[Edit: La question initialement posée de savoir comment obtenir la mantisse et l'exposant.]
Où n est le nombre pour obtenir la vraie mantisse/exposant:
Ou, pour obtenir la réponse que vous recherchez:
Ce ne sont pas Java exactement, mais doit être facile à convertir.
Partie entière obtient à partir de la fonderie simple et pour les fractions de chaîne de fendage:
Que faire si votre numéro est 2.39999999999999. Je suppose que vous voulez pour obtenir la valeur décimale. Ensuite, utilisez BigDecimal:
Depuis le
fmt:formatNumber
balise n'est pas toujours le rendement le résultat correct, voici une autre JSP seule approche: Il vient de formats le numéro de la chaîne et le reste du calcul sur la chaîne, depuis que c'est plus facile et ne nécessite pas plus de l'arithmétique à virgule flottante.fmt:formatNumber
des tours de son argument, qui n'est pas souhaitable dans ce cas.Beaucoup de ces réponses ont d'horribles erreurs d'arrondi parce qu'ils sont les numéros de coulée à partir d'un type à l'autre. Que diriez-vous:
Math.abs
?Accepté la réponse ne fonctionnent pas bien pour les nombres négatifs entre -0 et de -1.0
Donner également de la partie fractionnaire négatif.
Par exemple:
Pour nombre -0,35
retourne
Partie entière = 0
Partie fractionnaire = -0.35
Si wou travaillent avec des coordonnées GPS, il est préférable d'avoir un résultat avec le signum sur la partie entière comme:
Partie entière = -0
Partie fractionnaire = 0.35
Ces nombres sont utilisés par exemple pour les coordonnées GPS, où sont importants, le signum pour Lat ou position Longue
Proposer code:
De sortie:
Depuis Java 8, vous pouvez utiliser
Math.floorDiv
.Il renvoie la plus grande (la plus proche de l'infini positif)
int
valeur qui est inférieure ou égale à la algébrique quotient.Quelques exemples:
Sinon, le
/
opérateur peut être utilisé:Références:
Je voudrais utiliser BigDecimal pour la solution. Comme ceci: