Convertir en double pour flotter en Java

Exemple: convertir le double en flottant

Je suis confronté à un problème lié à la conversion du double en float . En fait, je stocke un type flottant, 23423424666767 , dans une firebase database, mais lorsque nous obtenons des données de la firebase database dans le code ci-dessous, getInfoValueNumeric() est de type double . La valeur que nous obtenons est dans le formulaire 2.3423424666767E13 .

Alors, comment pouvons-nous obtenir un format de données float comme 23423424666767 ?

2.3423424666767E13 to 23423424666767

 public void setInfoValueNumeric(java.lang.Double value) { setValue(4, value); } @javax.persistence.Column(name = "InfoValueNumeric", precision = 53) public java.lang.Double getInfoValueNumeric() { return (java.lang.Double) getValue(4); } 

Lire la suite: Convertir double pour flotter en Java

    Il suffit de lancer votre double sur un flotteur.

     double d = getInfoValueNumeric(); float f = (float)d; 

    Notez également que les types primitifs NE peuvent PAS stocker un ensemble infini de nombres:

     float range: from 1.40129846432481707e-45 to 3.40282346638528860e+38 double range: from 1.7e–308 to 1.7e+308 

    Je vous suggère de récupérer la valeur stockée dans la firebase database en tant que type BigDecimal:

     BigDecimal number = new BigDecimal("2.3423424666767E13"); int myInt = number.intValue(); double myDouble = number.doubleValue(); // your purpose float myFloat = number.floatValue(); 

    BigDecimal vous fournit beaucoup de fonctionnalités.

    Pour répondre à votre requête sur “Comment convertir 2.3423424666767E13 en 23423424666767”

    Vous pouvez utiliser un formateur décimal pour formater des nombres décimaux.

      double d = 2.3423424666767E13; DecimalFormat decimalFormat = new DecimalFormat("#"); System.out.println(decimalFormat.format(d)); 

    Sortie: 23423424666767

    Convertir Double à Float

     public static Float convertToFloat(Double doubleValue) { return doubleValue == null ? null : doubleValue.floatValue(); } 

    Convertir double en Float

     public static Float convertToFloat(double doubleValue) { return (float) doubleValue; } 

    Convertir du double au flottant sera une conversion plus étroite. De la doc :

    Une conversion primitive restreinte peut perdre des informations sur la magnitude globale d’une valeur numérique et peut également perdre de la précision et de la scope.

    Une conversion primitive étroite du double au flottant est régie par les règles d’arrondi IEEE 754 (§4.2.4). Cette conversion peut perdre de la précision, mais aussi perdre de la scope, résultant en un flottant nul à partir d’un double non nul et d’un infini flottant à partir d’un double fini. Un double NaN est converti en un NaN flottant et un double infini est converti en un infini identique à un flottant signé.

    Donc, ce n’est pas une bonne idée. Si vous le voulez encore, vous pouvez le faire comme:

     double d = 3.0; float f = (float) d; 

    Le problème est que votre valeur ne peut pas être stockée avec précision dans un type à virgule flottante simple précision. Preuve:

     public class test{ public static void main(Ssortingng[] args){ Float a = Float.valueOf("23423424666767"); System.out.printf("%f\n", a); //23423424135168,000000 System.out.println(a); //2.34234241E13 } } 

    Une autre chose est: vous n’obtenez pas “2.3423424666767E13”, c’est juste la représentation visuelle du nombre stocké en mémoire. “Comment vous imprimez” et “ce qui est en mémoire” sont deux choses distinctes. L’exemple ci-dessus vous montre comment imprimer le numéro en tant que valeur flottante, ce qui évite la notation scientifique que vous obteniez.

    Tout d’abord, le fait que la valeur dans la firebase database soit un flottant ne signifie pas qu’elle s’adapte également à un float Java. Float est l’abréviation de virgule flottante , et des types de virgule flottante de différentes précisions existent. Les types Java float et double sont tous deux des types à virgule flottante de précision différente. Dans une firebase database, les deux sont appelés FLOAT . Puisque le double a une précision supérieure à celle du float , il est probablement préférable de ne pas convertir votre valeur en float , car vous risquez de perdre de la précision.

    Vous pouvez également utiliser BigDecimal , qui représente un nombre de précision arbitraire.