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 ().