W Javie, kiedy dostarczam zmienną zmiennoprzecinkową do printf
lub String.format
, to nic nie daje. Aby zilustrować, przykład:
public class test {
public static void main(String arg[]) {
double d = 123.456;
System.out.println("println: " + d + " " + (int) d);
System.out.printf("printf as int: %d%n", (int) d);
System.out.printf("printf with %%f: %f%n", d);
System.out.printf("printf with %%e: %e%n", d);
System.out.printf("printf with %%g: %g%n", d);
System.out.printf("printf with %%a: %a%n", d);
}
}
Daje
in println: 123.456 123
in printf as int: 123
in printf with %f:
in printf with %e:
in printf with %g:
in printf with %a:
Jak widać, działa z println
, ale nie działa na printf. To samo dotyczy String.format
. Jeśli podam szerokość i precyzję, robi to samo - nic nie daje.
Co ja robię źle?
EDYCJA: używam lokalizacji en_US.UTF-8; Nie jestem pewien, jakiej wersji Javy używam. Co wiem to: skompilowałem go za pomocą gcc (gcj), wersja 4.7.2; I mieć zainstalowane gcj JRE w wersji 4.7.2 i OpenJDK JRE w wersji 7u7-2.3.2a.; Edytowałem kod. Teraz jest to cały kod programu. Napisałem go jako mały program testowy po tym, jak zauważyłem problemy z liczbami zmiennoprzecinkowymi w moim innym kodzie.
2 odpowiedzi
Jest duża szansa, że to błąd w GCJ. Zobacz tutaj: http://bugs.debian.org/cgi-bin/ bugreport.cgi?bug=561685
Pozbądź się GCJ i użyj OpenJDK lub Sun/OracleJDK.
Oto mój kod i moje wyniki. Nie widzę problemu.
package foo;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
double d = 123.456;
System.out.println("in println: " + d + " " + (int) d);
System.out.printf("in printf as int: %d%n", (int) d);
System.out.printf("in printf with %%f: %a%n", d);
System.out.printf("in printf with %%e: %e%n", d);
System.out.printf("in printf with %%g: %g%n", d);
System.out.printf("in printf with %%a: %a%n", d);
}
}
Daje
in println: 123.456 123
in printf as int: 123
in printf with %f: 0x1.edd2f1a9fbe77p6
in printf with %e: 1.234560e+02
in printf with %g: 123.456
in printf with %a: 0x1.edd2f1a9fbe77p6
Podobne pytania
Nowe pytania
java
Java to język programowania wysokiego poziomu. Użyj tego tagu, jeśli masz problemy z używaniem lub zrozumieniem samego języka. Ten tag jest rzadko używany samodzielnie i jest najczęściej używany w połączeniu z [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] i [maven].