Odpowiedzi:
Możesz użyć tej printf
metody:
System.out.printf("%.2f", val);
Krótko mówiąc, %.2f
składnia mówi Javie, aby zwróciła zmienną ( val
) z 2 miejscami dziesiętnymi ( .2
) w postaci dziesiętnej liczby zmiennoprzecinkowej ( f
) od początku specyfikatora formatu ( %
).
Oprócz innych znaków konwersji możesz użyć f
:
d
: liczba całkowita dziesiętnao
: ósemkowa liczba całkowitae
: zmiennoprzecinkowy w notacji naukowejLocale.FRANCE
?
Locale.US
idzie za daleko. Jeśli potrzebujesz zakodować na stałe „neutralne” ustawienia regionalne dla składania spraw, renderowania liczb itp., Podaj Locale.ROOT
. Byłoby to odpowiednie dla tekstu, który zostanie zużyty przez inny program, a nie renderowany dla użytkowników. W przypadku tekstu prezentowanego użytkownikowi należy uszanować jego ustawienia narodowe, niezależnie od tego, czy podano go wyraźnie, czy jest to ustawienie domyślne.
Możesz użyć DecimalFormat
. Jednym ze sposobów użycia:
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
System.out.println(df.format(decimalNumber));
Innym jest zbudowanie go przy użyciu #.##
formatu.
Uważam, że wszystkie opcje formatowania są mniej czytelne niż wywoływanie metod formatowania, ale jest to kwestia preferencji.
System.out.printf("%.2f", value)
składnią? Czy nadal jest w pobliżu?
DecimalFormat
odpowiedzi, od razu pomyślałem, że się mylę, ale dziękuję za wyjaśnienie.
df.setMinimumFractionDigits(2);
do siły dwie cyfry
Sugerowałbym użycie String.format (), jeśli potrzebujesz wartości jako String
w swoim kodzie.
Na przykład możesz użyć String.format()
w następujący sposób:
float myFloat = 2.001f;
String formattedString = String.format("%.02f", myFloat);
float f = 102.236569f;
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsF = Float.valueOf(decimalFormat.format(f)); // output is 102.24
float floatValue=22.34555f;
System.out.print(String.format("%.2f", floatValue));
Wyjście wynosi 22,35. Jeśli potrzebujesz 3 miejsc po przecinku, zmień go na „% .3f”.
Wiele osób wspomniało DecimalFormat
. Ale możesz także użyć, printf
jeśli masz najnowszą wersję Java:
System.out.printf("%1.2f", 3.14159D);
Więcej informacji na temat ciągu formatu printf można znaleźć w dokumentacji Formatera .
Prostą sztuczką jest wygenerowanie krótszej wersji zmiennej przez pomnożenie jej przez np. 100
Zaokrąglenie i 100.0
ponowne podzielenie . W ten sposób generujesz zmienną z 2 miejscami po przecinku :
double new_variable = Math.round(old_variable*100) / 100.0;
Ta „tania sztuczka” zawsze była dla mnie wystarczająca i działa w dowolnym języku (nie jestem osobą Java, tylko się jej uczę).
Możesz użyć tych szybkich kodów poniżej, które zmieniły się na końcu. Dodaj, ile zer odnosi się do kropki po punkcie
float y1 = 0.123456789;
DecimalFormat df = new DecimalFormat("#.00");
y1 = Float.valueOf(df.format(y1));
Zmienna y1 była wcześniej równa 0,123456789 . Po kodzie zmienia się tylko w 0.12 .
Spójrz na DecimalFormat
Oto przykład z samouczka:
DecimalFormat myFormatter = new DecimalFormat(pattern);
String output = myFormatter.format(value);
System.out.println(value + " " + pattern + " " + output);
Jeśli wybierzesz wzór taki jak „###. ##”, otrzymasz dwa miejsca po przecinku i myślę, że wartości są zaokrąglane w górę. Będziesz chciał spojrzeć na link, aby uzyskać dokładnie taki format, jaki chcesz (np. Czy chcesz końcowe zera)
Poniżej znajduje się kod, w jaki sposób wyświetlić dane wyjściowe danych zmiennoprzecinkowych z 2 miejscami dziesiętnymi w Javie:
float ratingValue = 52.98929821f;
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsFR = Float.valueOf(decimalFormat.format(ratingValue)); // output is 52.98
OK - str do pływania.
package test;
import java.text.DecimalFormat;
public class TestPtz {
public static void main(String[] args) {
String preset0 = "0.09,0.20,0.09,0.07";
String[] thisto = preset0.split(",");
float a = (Float.valueOf(thisto[0])).floatValue();
System.out.println("[Original]: " + a);
a = (float) (a + 0.01);
// Part 1 - for display / debug
System.out.printf("[Local]: %.2f \n", a);
// Part 2 - when value requires to be send as it is
DecimalFormat df = new DecimalFormat();
df.setMinimumFractionDigits(2);
df.setMaximumFractionDigits(2);
System.out.println("[Remote]: " + df.format(a));
}
}
Wynik:
run:
[Original]: 0.09
[Local]: 0.10
[Remote]: 0.10
BUILD SUCCESSFUL (total time: 0 seconds)
mały prosty program do demonstracji:
import java.io.*;
import java.util.Scanner;
public class twovalues {
public static void main(String args[]) {
float a,b;
Scanner sc=new Scanner(System.in);
System.out.println("Enter Values For Calculation");
a=sc.nextFloat();
b=sc.nextFloat();
float c=a/b;
System.out.printf("%.2f",c);
}
}
Po prostu zrób, String str = System.out.printf("%.2f", val).replace(",", ".");
jeśli chcesz mieć pewność, że niezależnie od ustawień regionalnych użytkownika, zawsze otrzymasz / wyświetlisz „.” jako separator dziesiętny. Jest to konieczne, jeśli nie chcesz powodować awarii programu, jeśli później wykonasz jakąś konwersjęfloat f = Float.parseFloat(str);
Jeden problem, który miał mnie przez godzinę lub dłużej DecimalFormat
- Włącza podwójne i zmienne wejście danych inaczej. Nawet zmiana RoundingMode nie pomogła. Nie jestem ekspertem, ale pomyślałem, że to może pomóc komuś takiemu jak ja. Skończyło się na tym Math.round
zamiast. Patrz poniżej:
DecimalFormat df = new DecimalFormat("#.##");
double d = 0.7750;
System.out.println(" Double 0.7750 -> " +Double.valueOf(df.format(d)));
float f = 0.7750f;
System.out.println(" Float 0.7750f -> "+Float.valueOf(df.format(f)));
// change the RoundingMode
df.setRoundingMode(RoundingMode.HALF_UP);
System.out.println(" Rounding Up Double 0.7750 -> " +Double.valueOf(df.format(d)));
System.out.println(" Rounding Up Float 0.7750f -> " +Float.valueOf(df.format(f)));
Wynik:
Double 0.7750 -> 0.78
Float 0.7750f -> 0.77
Rounding Up Double 0.7750 -> 0.78
Rounding Up Float 0.7750f -> 0.77
Spróbuj tego:-
private static String getDecimalFormat(double value) {
String getValue = String.valueOf(value).split("[.]")[1];
if (getValue.length() == 1) {
return String.valueOf(value).split("[.]")[0] +
"."+ getValue.substring(0, 1) +
String.format("%0"+1+"d", 0);
} else {
return String.valueOf(value).split("[.]")[0]
+"." + getValue.substring(0, 2);
}
}
String.format(java.util.Locale.US,"%.2f", val);