View Full Version : [JAVA] visualizzare float senza decimali se 0
Ciao a tutti, c'è modo di visulizzare un float come se fosse un int nel caso che le sue cifre decimali siano 0? Qualche esempio
input: 21.3
output: 21.3
input: 5.0
output: 5
banryu79
08-04-2010, 08:38
metodo String.format() di java.lang.String ;)
Vedi i javadoc, c'è un link che rimanda ai javadoc di java.util.Formatter e spiega come specificare la "format string".
Questo se ti serve ottenere quel float come una Stringa formattata (utile ad esempio per stamparlo su un file).
Se vuoi solo ottenere un output formattato da stampare sullo standard output allora c'è System.out.printf().
Anche qui però devi specificare la "format string".
Ti ringrazio, avevo già trovato le pagine in questione ma mi viene un po' difficile capire come si usano. Devo usare il flag '0' o sbaglio?
Io ho fatto qualcosa come
System.out.printf("input: 21.0\noutput: %0f", 21.0);
Ma niente :(
banryu79
08-04-2010, 09:23
Così:
System.out.printf("input: 21.0\noutput: %.0f", 21.0);
@EDIT:
Questo è la sintassi della "format string":
%[argument_index$][flags][width][.precision]conversion
Dopo il campo 'flags' e dopo il campo 'width' (opzionali) può essere specificato un campo [.precision] che indica quanti decimali tenere dopo la virgola.
Ma così se il decimale non è zero me lo toglie uguale.
banryu79
08-04-2010, 10:06
Ma così se il decimale non è zero me lo toglie uguale.
Vero, scusa ho preso una svista.
Allora mi sa che devi farlo tu: non mi sembra sia possibile specificare un comportamento del genere (cioè di limitare la precisione a una sola cifra E di non stamparla nel caso sia 0).
Ad esempio così (un'idea di massima):
public class FloatFormatter
{
public static void main(String[] args) {
float num = 21.0f;
System.out.println("num = "+ num);
System.out.println("formatted num = "+doCustomFormat(num, 1));
}
public static String doCustomFormat(float f, int precision) {
float intPart = Float.valueOf(f).intValue();
String formatString = (intPart==f) ? "%.0f" : "%."+precision+"f";
return String.format(formatString, f);
}
}
Vero, scusa ho preso una svista.
Allora mi sa che devi farlo tu: non mi sembra sia possibile specificare un comportamento del genere (cioè di limitare la precisione a una sola cifra E di non stamparla nel caso sia 0).
Ad esempio così (un'idea di massima):
public class FloatFormatter
{
public static void main(String[] args) {
float num = 21.0f;
System.out.println("num = "+ num);
System.out.println("formatted num = "+doCustomFormat(num, 1));
}
public static String doCustomFormat(float f, int precision) {
float intPart = Float.valueOf(f).intValue();
String formatString = (intPart==f) ? "%.0f" : "%."+precision+"f";
return String.format(formatString, f);
}
}
giusto x la cronaca ... ma nn e meglio usare DecimaFormat ? :stordita:
DecimalFormat decimal = new DecimalFormat("##0.##"); //, symbols);
float f = 13.0f;
System.out.println(decimal.format(f));
banryu79
08-04-2010, 11:37
giusto x la cronaca ... ma nn e meglio usare DecimaFormat ?
Evidentemente sì... ma io lo ignoravo :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.