web-dev-qa-db-fra.com

Convertir double pour flotter en Java

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

Alors, comment pouvons-nous obtenir des données au format float telles que 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);
}
42
Sitansu

Il suffit de jeter 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
130
Tom Wellbrock

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 fournit de nombreuses fonctionnalités. 

17
antoniodvr

Convertir Double en 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;
}
8
Linh

Pour répondre à votre question sur "Comment convertir 2.342342466676767E13 en 23423424666767"

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

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

Sortie: 23423424666767

3
Priyambada Madala

La conversion de double en float réduira la conversion. Depuis le doc :

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

Une conversion primitive étroite de double en float est régie par les règles d'arrondi IEEE 754 (§4.2.4). Cette conversion peut perdre précision, mais aussi perdre de la plage, résultant en un float zéro à partir d'un double non nul et un infini flottant à partir d'un double fini. Un double NaN est converti en un NaN float et un double infini est converti en même signe float infinity.

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;
1
i_am_zero

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 une Java float. Float est l'abréviation de float, et il existe des types de virgule flottante de différentes précisions. 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. Étant donné que double a une précision plus élevée que float, il est probablement préférable de pas de transtyper votre valeur en float, car vous risqueriez de perdre de la précision.

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

0
Hoopje

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(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.342342466676767E13", c'est juste la représentation visuelle du nombre stocké en mémoire. "Comment imprimer" et "ce qui est en mémoire" sont deux choses distinctes. L'exemple ci-dessus vous montre comment imprimer le nombre en tant que nombre flottant, ce qui évite la notation scientifique que vous obteniez.

0
piezol

Utilisez la conversion de type de données. Par exemple:

// converting from double to float:
double someValue;
// cast someValue to float!
float newValue = (float)someValue;

À votre santé!

Remarque: 

Les entiers sont des nombres entiers, par exemple 10, 400 ou -5.

Les nombres à virgule flottante (float) ont des décimales et des décimales, par exemple 12,5 et 56,7786543.

Les doubles sont un type spécifique de nombre à virgule flottante qui ont une précision supérieure à celle des nombres à virgule flottante standard (ce qui signifie qu'ils sont précis avec un nombre de décimales supérieur).

0
wpmoradi