Convertir double en flottant en Java

Exemple: convertir double en float

, je suis confronté à un problème lié à la conversion de double à float. En fait, je stocke un type float, 23423424666767, dans une base de données, mais quand nous obtenir des données de la base de données dans le code ci-dessous, getInfoValueNumeric(), c'est de double type. La valeur que nous obtenons est sous la forme 2.3423424666767E13.

Alors, comment obtenons-nous des données de format 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 plus: Convertir double flotter dans Java

40
demandé sur Sitansu 2015-09-29 10:09:41

8 réponses

Il suffit de lancer votre double à 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
119
répondu Tom Wellbrock 2016-07-27 09:19:05

Je vous suggère de récupérer la valeur stockée dans la base de données 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 offre beaucoup de fonctionnalités.

13
répondu məˈSHēn 2015-09-29 07:26:35

Convertir Double à Float

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

Convertir double à Float

public static Float convertToFloat(double doubleValue) {
    return (float) doubleValue;
}
4
répondu Phan Van Linh 2017-11-23 02:01:31

Pour répondre à votre requête sur " comment convertir 2. 3423424666767E13 en 23423424666767"

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

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

Sortie: 23423424666767

3
répondu Priyambada Madala 2015-09-29 07:20:23

La conversion de double en float sera une conversion de rétrécissement. À partir de la doc:

Une conversion primitive de rétrécissement peut perdre des informations sur l'ampleur globale d'une valeur numérique et peut également perdre de la précision et gamme.

Une conversion primitive rétrécissante de double à float est régie par les règles D'arrondi IEEE 754 (§4.2.4). Cette conversion peut perdre précision, mais aussi perdre gamme, résultant en un flotteur zéro de un double non nul et a flotter l'infini À partir d'un double fini. Une double NaN est converti en un flotteur Nan et un double infini est converti en de même signé le flotteur de l'infini.

Ce n'est donc pas une bonne idée. Si vous souhaitez encore vous pouvez le faire comme:

double d = 3.0;
float f = (float) d;
1
répondu i_am_zero 2015-09-29 07:27:30

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

public class test{
    public static void main(String[] 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 de flotter, ce qui évite la notation scientifique vous.

0
répondu piezol 2015-09-29 07:24:52

Tout d'abord, le fait que la valeur dans la base de données soit un float ne signifie pas qu'elle s'intègre également dans un Java float. Float est l'abréviation de virgule flottante , et les types de virgule flottante de diverses précisions existent. Les types Java float et double sont tous deux des types à virgule flottante de précision différente. Dans une base de données, les deux sont appelés FLOAT. Puisque double a une précision supérieure à float, Il est probablement préférable depas de convertir votre valeur en float, car vous risquez de perdre précision.

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

0
répondu Hoopje 2015-09-29 07:55:59

Flotter.parseFloat(Chaîne de caractères.valueOf (your_number)

-1
répondu Akash Middinti 2016-07-24 11:04:51