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
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
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.
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;
}
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
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;
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.
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.
Flotter.parseFloat(Chaîne de caractères.valueOf (your_number)