tipos rango punto primitivos flotante float entre ejemplos ejemplo diferencia datos java floating-point render-to-string

java - rango - ¿Por qué algunos números de punto flotante aparecen con un 0 al final?



tipos de variables en java ejemplos (2)

Esto fue identificado como un error en Java 1.3 - Java 6: http://bugs.java.com/view_bug.do?bug_id=4428022

EDITAR: En cuanto a por qué sucede esto, esta es la solución a la que se hace referencia en el informe de error que se portó desde OpenJDK 6: http://hg.openjdk.java.net/jdk6/jdk6/jdk/rev/8159687b6316

Resulta que es un error de off-by-one. (La corrección cambia <= a <).

¿Alguien sabe por qué los números de 0,001 a 0,009 se representan en una cadena con un 0 al final pero otros números no. Por ejemplo, los números 0.01 a 0.09 no.

System.out.println(Locale.getDefault()); for (int i = 0; i <= 20; i++) System.out.println(i / 1e3);

huellas dactilares

en_GB 0.0 0.0010 0.0020 0.0030 0.0040 0.0050 0.0060 0.0070 0.0080 0.0090 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02

EDITAR El código para DecimalFormat no parece depender de la configuración regional. Si corro

for (Locale l : Locale.getAvailableLocales()) { Locale.setDefault(l); System.out.println(l + " " + 1 / 1e3); }

en Java 6 actualización 26 en Ubuntu 11.04 me sale

ja_JP 0.0010 es_PE 0.0010 en 0.0010 ... many locales with the same result ... sv_SE 0.0010 da_DK 0.0010 es_HN 0.0010

en Java 7 en el mismo sistema que consigo

ms_MY 0.001 ar_QA 0.001 is_IS 0.001 ... many locales with the same result ... el_CY 0.001 hu 0.001 fr_FR 0.001


Para aquellos interesados, aquí hay una diferencia entre la clase FloatingDecimal responsable de crear la representación de cadena del doble. Como puede ver en el diff, el parche corrige el caso especial encontrado cuando el exponente es -3 en el método dtoa ().