Mam problemy z formatowaniem ułamków dziesiętnych podwójnej. Jeśli mam podwójną wartość, np. 4.0, jak sformatować ułamki dziesiętne, aby zamiast tego było 4,00?
Mam problemy z formatowaniem ułamków dziesiętnych podwójnej. Jeśli mam podwójną wartość, np. 4.0, jak sformatować ułamki dziesiętne, aby zamiast tego było 4,00?
Odpowiedzi:
Jednym ze sposobów byłoby użycie NumberFormat .
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(4.0));
Wynik:
4.00
W Javie 8 możesz użyć format
metody ..: -
System.out.format("%.2f", 4.0); // OR
System.out.printf("%.2f", 4.0);
f
jest używany do floating
wartość punktowa.2
po przecinku oznacza liczbę miejsc po przecinku .
W przypadku większości wersji Java możesz użyć DecimalFormat
: -
DecimalFormat formatter = new DecimalFormat("#0.00");
double d = 4.0;
System.out.println(formatter.format(d));
Użyj formatu String.format :
String.format("%.2f", 4.52135);
Zgodnie z dokumentami:
Zawsze używane ustawienie narodowe jest zwracane przez
Locale.getDefault()
.
Używając String.format, możesz to zrobić:
double price = 52000;
String.format("$%,.2f", price);
Zwróć uwagę na przecinek, który odróżnia to od odpowiedzi @ Vincenta
Wynik:
$52,000.00
Dobrym źródłem informacji o formatowaniu jest oficjalna strona Java na ten temat
Zawsze możesz użyć metody statycznej printf from System.out
- następnie zaimplementowałbyś odpowiedni program formatujący; oszczędza to miejsce na stosie, na którym wymagały tego inne przykłady.
Dawny:
System.out.format("%.4f %n", 4.0);
System.out.printf("%.2f %n", 4.0);
Oszczędza miejsce na stosie, co jest dość dużą zaletą, niemniej jednak uważam, że ten przykład jest znacznie łatwiejszy w zarządzaniu niż jakakolwiek inna odpowiedź, zwłaszcza, że większość programistów zna funkcję printf z C (chociaż Java nieznacznie zmienia funkcję / metodę).
out
jest PrintStream
.
double d = 4.0;
DecimalFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
System.out.println(nf.format("#.##"));
new DecimalFormat("#0.00").format(4.0d);
Alternatywną metodą jest użycie setMinimumFractionDigits
metody zNumberFormat
klasy.
Tutaj w zasadzie określasz, ile liczb ma się pojawić po przecinku.
Tak więc wkład w postaci 4.0
wyprodukowałby4.00
, zakładając, że podana przez Ciebie kwota wynosi 2.
Ale jeśli twój Double
dane wejściowe zawierają więcej niż określona kwota, zajmie określoną minimalną kwotę, a następnie dodaj jeszcze jedną cyfrę zaokrągloną w górę / w dół
Na przykład 4.15465454
przy minimalnej określonej ilości 2 wyprodukuje4.155
NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(2);
Double myVal = 4.15465454;
System.out.println(nf.format(myVal));
Można to zrobić na wiele sposobów. Poniżej podano:
Załóżmy, że Twój oryginalny numer jest podany poniżej:
double number = 2354548.235;
Korzystanie z NumberFormat:
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(number));
Korzystanie z String.format:
System.out.println(String.format("%,.2f", number));
Korzystanie z DecimalFormat i wzorca:
NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
DecimalFormat decimalFormatter = (DecimalFormat) nf;
decimalFormatter.applyPattern("#,###,###.##");
String fString = decimalFormatter.format(number);
System.out.println(fString);
Korzystanie z DecimalFormat i wzorca
DecimalFormat decimalFormat = new DecimalFormat("############.##");
BigDecimal formattedOutput = new BigDecimal(decimalFormat.format(number));
System.out.println(formattedOutput);
We wszystkich przypadkach wynik będzie następujący: 2354548,23
Uwaga :
Podczas zaokrąglania możesz dodać RoundingMode
swój formater. Oto kilka trybów zaokrąglania podanych poniżej:
decimalFormat.setRoundingMode(RoundingMode.CEILING);
decimalFormat.setRoundingMode(RoundingMode.FLOOR);
decimalFormat.setRoundingMode(RoundingMode.HALF_DOWN);
decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
decimalFormat.setRoundingMode(RoundingMode.UP);
Oto import :
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
Możesz użyć dowolnej z poniższych metod
Jeśli używasz java.text.DecimalFormat
DecimalFormat decimalFormat = NumberFormat.getCurrencyInstance();
decimalFormat.setMinimumFractionDigits(2);
System.out.println(decimalFormat.format(4.0));
LUB
DecimalFormat decimalFormat = new DecimalFormat("#0.00");
System.out.println(decimalFormat.format(4.0));
Jeśli chcesz przekonwertować go na prosty format ciągu
System.out.println(String.format("%.2f", 4.0));
Cały powyższy kod spowoduje wydrukowanie 4,00
Działa w 100%.
import java.text.DecimalFormat;
public class Formatting {
public static void main(String[] args) {
double value = 22.2323242434342;
// or value = Math.round(value*100) / 100.0;
System.out.println("this is before formatting: "+value);
DecimalFormat df = new DecimalFormat("####0.00");
System.out.println("Value: " + df.format(value));
}
}
Pierwszy import NumberFormat
. Następnie dodaj to:
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
To da ci dwa miejsca po przecinku i umieści znak dolara, jeśli chodzi o walutę.
import java.text.NumberFormat;
public class Payroll
{
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
int hoursWorked = 80;
double hourlyPay = 15.52;
double grossPay = hoursWorked * hourlyPay;
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
System.out.println("Your gross pay is " + currencyFormatter.format(grossPay));
}
}
Możesz to zrobić w następujący sposób:
double d = 4.0;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
##
zamiast00
Wiem, że to stary temat, ale jeśli naprawdę lubisz mieć kropkę zamiast przecinka, po prostu zapisz swój wynik jako X, 00 w ciągu znaków, a następnie po prostu zmień go na okres, aby otrzymać X,00
Najprostszym sposobem jest użycie zamiany.
String var = "X,00";
String newVar = var.replace(",",".");
Wynik będzie żądanym X.00 . Aby było to łatwiejsze, możesz zrobić to wszystko za jednym razem i zapisać w podwójnej zmiennej:
Double var = Double.parseDouble(("X,00").replace(",",".");
Wiem, że ta odpowiedź na razie się nie przydaje, ale może ktoś sprawdzający to forum będzie szukał takiego szybkiego rozwiązania.
String.format()
lubjava.text.Format
.