titledborder - Convertir doble a flotante en Java
titledborder java (10)
Me enfrento a un problema relacionado con la conversión de
double
a
float
.
En realidad,
23423424666767
un tipo flotante,
23423424666767
, en una base de datos, pero cuando obtenemos datos de la base de datos en el siguiente código,
getInfoValueNumeric()
, es de
double
tipo.
El valor que obtenemos está en la forma
2.3423424666767E13
.
Entonces, ¿cómo obtenemos datos de formato
float
como
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);
}
Para responder a su consulta sobre "Cómo convertir 2.3423424666767E13 a 23423424666767"
Puede usar un formateador decimal para formatear números decimales.
double d = 2.3423424666767E13;
DecimalFormat decimalFormat = new DecimalFormat("#");
System.out.println(decimalFormat.format(d));
Salida: 23423424666767
Convertir
Double
a
Float
public static Float convertToFloat(Double doubleValue) {
return doubleValue == null ? null : doubleValue.floatValue();
}
Convertir
double
a
Float
public static Float convertToFloat(double doubleValue) {
return (float) doubleValue;
}
El problema es que su valor no puede almacenarse con precisión en un tipo de coma flotante de precisión simple. Prueba:
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
}
}
Otra cosa es: no obtienes "2.3423424666767E13", es solo la representación visual del número almacenado en la memoria. "Cómo imprimir" y "lo que está en la memoria" son dos cosas distintas. El ejemplo anterior muestra cómo imprimir el número como flotante, lo que evita la notación científica que estaba obteniendo.
En primer lugar, el hecho de que el valor en la base de datos sea flotante no significa que también encaje en un
float
Java.
Float es la abreviatura de
coma flotante
, y existen tipos de coma flotante de varias precisiones.
Los tipos Java
float
y
double
son tipos de punto flotante de diferente precisión.
En una base de datos, ambos se llaman
FLOAT
.
Dado que el
double
tiene una precisión más alta que el
float
, probablemente sea una mejor idea
no
convertir su valor en un
float
, ya que podría perder precisión.
También puede usar
BigDecimal
, que representa un número de precisión arbitraria.
Esta es una buena manera de hacerlo:
`Double d = 0.5;` `float f = d.floatValue();`
Si tiene d como un tipo primitivo, simplemente agregue una línea:
double d = 0.5; `Double D = Double.valueOf(d);` `float f = D.floatValue();`
Float.parseFloat (String.valueOf (su_número)
La conversión de doble a flotante será una conversión de reducción. Del doc :
Una conversión primitiva estrecha puede perder información sobre la magnitud general de un valor numérico y también puede perder precisión y rango.
Una conversión primitiva estrecha de doble a flotante se rige por las reglas de redondeo IEEE 754 (§4.2.4). Esta conversión puede perder precisión, pero también perder rango, lo que resulta en un cero flotante de un doble distinto de cero y un infinito flotante de un doble finito. Un NaN doble se convierte en un NaN flotante y un infinito doble se convierte en el infinito flotante con el mismo signo.
Entonces no es una buena idea. Si aún lo quieres puedes hacerlo como:
double d = 3.0;
float f = (float) d;
Le sugiero que recupere el valor almacenado en la base de datos como tipo BigDecimal:
BigDecimal number = new BigDecimal("2.3423424666767E13");
int myInt = number.intValue();
double myDouble = number.doubleValue();
// your purpose
float myFloat = number.floatValue();
BigDecimal le proporciona muchas funcionalidades.
Solo lanza tu doble a un flotador.
double d = getInfoValueNumeric();
float f = (float)d;
Observe también que los tipos primitivos NO pueden almacenar un conjunto infinito de números:
float range: from 1.40129846432481707e-45 to 3.40282346638528860e+38
double range: from 1.7e–308 to 1.7e+308
Use dataType casting. Por ejemplo:
// converting from double to float:
double someValue;
// cast someValue to float!
float newValue = (float)someValue;
¡Salud!
Nota:
Los enteros son números enteros, por ejemplo, 10, 400 o -5.
Los números de coma flotante (flotantes) tienen puntos decimales y lugares decimales, por ejemplo, 12.5 y 56.7786543.
Los dobles son un tipo específico de número de coma flotante que tiene mayor precisión que los números de coma flotante estándar (lo que significa que son precisos para un mayor número de decimales).