J'essaie de séparer un double dans les parties entières et décimales
Ainsi, par exemple, le nombre 24.4 devrait être séparé en 24 et 4.
int integer = (int)number;
double decimal = number-(int)number;
System.out.println(decimal);
L'utilisation de cette méthode me donne les valeurs suivantes:
integer = 24
decimal = 0.3999999999999986
J'ai besoin que la valeur de décimale soit 4.
Comment ce problème peut-il être résolu?
Vous pouvez faire un String split(...)
. Et ensuite Integer parseInt(...)
pour récupérer les deux composants entiers.
En fonction du nombre de chiffres décimaux, vous pouvez utiliser cette méthode:
double number = 24.4;
int integer = (int)number;
double decimal = (10 * number - 10 * integer)/10;
System.out.println(decimal);
Explication : Supprimez les points décimaux, effectuez la soustraction et ramenez enfin le point décimal à son emplacement d'origine!
Ceci parce que double
s ne sont pas exactement des "nombres réels" - rappelez-vous qu'il existe un nombre infini de nombres réels dans n'importe quelle plage, alors qu'il n'y a qu'un nombre fini de chiffres dans double
- donc un nombre fini de valeurs, ainsi des arrondis doivent se produire.
Le fait est que 24.4 ne peut pas être exactement représenté par double
- la fraction de votre nombre est donc d’environ 0,3999 ....
Si vous voulez une solution exacte, vous devez utiliser une bibliothèque qui vous donne des valeurs exactes pour les nombres décimaux, telles que BigDecimal
.
Si vous voulez en savoir plus sur le fait que double
s n'est pas exact - vous devriez en savoir plus sur arithmétique à virgule flottante , et cet article , bien que de haut niveau, il est également indispensable de bien comprendre ce qui est passe.
Si vous ne comprenez pas encore ces articles, tenez compte des éléments suivants: Si vous avez besoin d'une valeur exacte - double
s ne peut pas la fournir -, vous devez utiliser une bibliothèque si tel est le cas.
float number = (float) 22.45;
int integer = (int)number;
double decimal = number-integer;
System.out.println(integer + "decimal" + decimal);
double number = 20.57;
Double.valueOf(String.valueOf(number)).intValue()
! [Voici ma solution] [1]
voici ma solution. J'ai utilisé une méthode simple en programmation C pour scinder les nombres fractionnaires en deux entiers différents ... Voici le code
#include<stdio.h>
void main()
{
float x=24.56; int y=(int)x; float z=(x-y)*1000000000; int zd=(int)z;
printf("%lf",x);
printf("\ninteger Part %d\n",y);
printf("\nDecimal Part %d\n",zd);
}
Sortie
24.559999 Entier Partie 24
Partie décimale 559999488
Voici une petite méthode que j'ai écrite pour accomplir ceci:
/**
*
* @param n
* @return
*/
private static double getFractionalPart(double n) {
if (n > 0) {
return n - Math.floor(n);
} else {
return ((n - Math.ceil(n)) * -1);
}
}
Comme RGO l'a déclaré, vous pouvez le faire et aussi arrondir le nombre décimal afin d'obtenir la valeur appropriée. Ex:
double number = 20.57;
int integer = (int)number;
double decimal = (10 * number - 10 * integer)/10;
double temp = Math.round(decimal*100.0)/100.0;
System.out.println("Int = " + integer + "\nDecimal = " + temp);
Commencez par trouver le nombre, les chiffres après la virgule, et multipliez ce nombre par 10. par exemple: x = 26.78621 puis multipliez par 100000 [ici vous ne pouvez pas multiplier comme x * 10, encore x * 10 et ainsi de suite (5 fois), la première fois que vous multipliez par 10, vous obtiendrez 267.862199999 ..] Après multiplication soustrayez 2600000 du résultat. voici un lien de votre réponse que j'ai code il. https://stackoverflow.com/a/18517555/2508414
Tu peux le faire:
(val - val.longValue()) * 100
utilisez 1000 pour obtenir 3 fractions:
par exemple:
(1.2445 - 1) * 100 = 0.244