Tengo un flotador primitivo y lo necesito como doble primitivo. Simplemente lanzar el flotador al doble me da una precisión extra extraña. Por ejemplo:
float temp = 14009.35F;
System.out.println(Float.toString(temp)); // Prints 14009.35
System.out.println(Double.toString((double)temp)); // Prints 14009.349609375
Sin embargo, si en lugar de emitir, obtengo el flotador como una cadena y analizo la cadena como un doble, obtengo lo que quiero:
System.out.println(Double.toString(Double.parseDouble(Float.toString(temp))));
// Prints 14009.35
¿Hay una mejor manera que ir a String y volver?
fuente
Encontré la siguiente solución:
Si usa float y double en lugar de Float y Double, use lo siguiente:
fuente
Utilice un en
BigDecimal
lugar defloat
/double
. Hay muchos números que no se pueden representar como punto flotante binario (por ejemplo,0.1
). Por lo tanto, siempre debe redondear el resultado a una precisión conocida o usarBigDecimal
.Consulte http://en.wikipedia.org/wiki/Floating_point para obtener más información.
fuente
BigDecimal
ya que eso detectará la mayoría de los errores comunes. Si las cosas van demasiado lentas, necesitan aprender más y encontrar formas de optimizar sus problemas. La optimización prematura es la raíz de todos los males: DE Knuth.Los flotadores, por naturaleza, son imprecisos y siempre tienen "problemas" de redondeo. Si la precisión es importante, entonces podría considerar refactorizar su aplicación para usar Decimal o BigDecimal.
Sí, los flotadores son computacionalmente más rápidos que los decimales debido a la compatibilidad con el procesador. Sin embargo, ¿quieres rápido o preciso?
fuente
Para obtener información, esto se incluye en el Artículo 48: Evite la flotación y el doble cuando se requieren valores exactos, de Effective Java 2nd edition de Joshua Bloch. Este libro está repleto de cosas buenas y definitivamente vale la pena echarle un vistazo.
fuente
¿Esto funciona?
fuente
Una solución simple que funciona bien es analizar el doble de la representación de cadena del flotador:
No es muy eficiente, ¡pero funciona!
fuente