Wiem, jak sformatować podwójne, aby zachować tylko dostępne miejsca dziesiętne (DP), do pewnej liczby DP. Ten przykład zawiera do 4 DP.Formatuj dwukrotnie, aby pominąć niepotrzebne ".0" i nigdy nie zaokrąglaj.
double d = 1.0;
DecimalFormat df = new DecimalFormat("#.####");
System.out.print(df.format(d)); // returns "1"
double d = 1.23;
DecimalFormat df = new DecimalFormat("#.####");
System.out.print(df.format(d)); // returns "1.23"
double d = 1.2345678;
DecimalFormat df = new DecimalFormat("#.####");
System.out.print(df.format(d)); // returns "1.2346", rounding off: bad!
Teraz chcę liczby całkowite, np. 1.0
do zwrócenia "1"
bez niepotrzebnego .0
, a znak formatu #
zapewnia tę funkcjonalność. Ale jak mogę się upewnić, że liczba ta nigdy się nie kończy? Czy istnieje inny sposób niż arbitralnie długi łańcuch #
, taki jak "#.###########################################"
?
czy mam po prostu użyć domyślnej konwersji do podwójnego sznurka i obciąć ".0"
jeżeli okaże się na końcu:
String s = "" + d;
if(s.substring(s.length()-2).equals(".0")) {
s=s.substring(0, s.length()-2);
}
Oba sposoby Wygląda strasznie niezdarny.
+1 dla Wow ... !! – RanRag
, nawet jeśli kompilator może zoptymalizować go, uważam, że lepszym stylem będzie użycie String.valueOf (x) zamiast "" + x – rurouni
@rurouni Wielu zgodziłoby się z tobą. Preferuję jednak prostszy kod, ponieważ jest on szybszy do odczytu i zapisu, co pozwala zaoszczędzić czas. Jeśli wydajność jest problemem, nadal nie użyłbym valueOf podczas tworzenia obiektów. –