Câu trả lời:
Bạn có thể sử dụng printf
phương thức, như vậy:
System.out.printf("%.2f", val);
Nói tóm lại, %.2f
cú pháp yêu cầu Java trả về biến của bạn ( val
) với 2 vị trí thập phân ( .2
) dưới dạng biểu diễn thập phân của số dấu phẩy động ( f
) từ đầu của trình xác định định dạng ( %
).
Ngoài ra còn có các ký tự chuyển đổi khác mà bạn có thể sử dụng f
:
d
: số nguyên thập phâno
: số nguyên bát phâne
: dấu phẩy động trong ký hiệu khoa họcLocale.FRANCE
?
Locale.US
đi quá xa. Nếu bạn cần mã hóa một miền địa phương "trung tính" để gấp chữ hoa, hiển thị số, v.v., hãy chỉ định Locale.ROOT
. Điều này sẽ phù hợp với văn bản sẽ được sử dụng bởi một chương trình khác, thay vì được hiển thị cho người dùng. Đối với văn bản được trình bày cho người dùng, hãy tôn trọng ngôn ngữ của họ, cho dù họ chỉ định rõ ràng hay đó là mặc định.
Bạn có thể dùng DecimalFormat
. Một cách để sử dụng nó:
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
System.out.println(df.format(decimalNumber));
Một cách khác là xây dựng nó bằng cách sử dụng #.##
định dạng.
Tôi thấy tất cả các tùy chọn định dạng ít dễ đọc hơn gọi các phương thức định dạng, nhưng đó là vấn đề ưu tiên.
System.out.printf("%.2f", value)
cú pháp? Nó vẫn còn ở đây à?
DecimalFormat
câu trả lời tôi lập tức nghĩ rằng mình đã sai, nhưng cảm ơn bạn đã làm rõ điều đó.
df.setMinimumFractionDigits(2);
vào lực lượng hai chữ số
Tôi sẽ đề nghị sử dụng String.format () nếu bạn cần giá trị dưới dạngString
mã trong mã của mình.
Ví dụ: bạn có thể sử dụng String.format()
theo cách sau:
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));
Đầu ra là 22,35. Nếu bạn cần 3 điểm thập phân, hãy đổi thành "% .3f".
Nhiều người đã đề cập DecimalFormat
. Nhưng bạn cũng có thể sử dụng printf
nếu bạn có phiên bản Java gần đây:
System.out.printf("%1.2f", 3.14159D);
Xem các tài liệu trên Trình định dạng để biết thêm thông tin về chuỗi định dạng printf .
Một mẹo đơn giản là tạo ra một phiên bản ngắn hơn của biến của bạn bằng cách nhân nó với ví dụ 100
, làm tròn nó và chia nó 100.0
lại. Bằng cách này, bạn tạo một biến, với 2 chữ số thập phân :
double new_variable = Math.round(old_variable*100) / 100.0;
"Thủ thuật rẻ tiền" này luôn đủ tốt cho tôi và hoạt động với bất kỳ ngôn ngữ nào (tôi không phải là người Java, chỉ học nó).
Bạn có thể sử dụng mã nhanh này bên dưới đã tự thay đổi vào cuối. Thêm bao nhiêu số không như tham chiếu sau điểm
float y1 = 0.123456789;
DecimalFormat df = new DecimalFormat("#.00");
y1 = Float.valueOf(df.format(y1));
Biến y1 là bằng 0,125456789 trước đó. Sau khi mã nó chỉ biến thành 0,12 .
Nhìn vào DecimalFormat
Đây là một ví dụ từ hướng dẫn:
DecimalFormat myFormatter = new DecimalFormat(pattern);
String output = myFormatter.format(value);
System.out.println(value + " " + pattern + " " + output);
Nếu bạn chọn một mẫu như "###. ##", bạn sẽ nhận được hai chữ số thập phân và tôi nghĩ rằng các giá trị được làm tròn lên. Bạn sẽ muốn nhìn vào liên kết để có được định dạng chính xác mà bạn muốn (ví dụ: bạn có muốn các số 0 không
Dưới đây là mã làm thế nào bạn có thể hiển thị đầu ra của dữ liệu nổi với 2 vị trí thập phân trong Java:
float ratingValue = 52.98929821f;
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsFR = Float.valueOf(decimalFormat.format(ratingValue)); // output is 52.98
OK - str để nổi.
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));
}
}
Đầu ra:
run:
[Original]: 0.09
[Local]: 0.10
[Remote]: 0.10
BUILD SUCCESSFUL (total time: 0 seconds)
chương trình nhỏ đơn giản để trình diễn:
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);
}
}
Chỉ cần làm String str = System.out.printf("%.2f", val).replace(",", ".");
nếu bạn muốn đảm bảo rằng độc lập với Địa điểm của người dùng, bạn sẽ luôn nhận được / hiển thị "." như dấu phân cách thập phân. Đây là điều bắt buộc nếu bạn không muốn làm cho chương trình của mình bị sập nếu sau đó bạn thực hiện một số loại chuyển đổi nhưfloat f = Float.parseFloat(str);
Một vấn đề khiến tôi mất một giờ hoặc hơn, trên DecimalFormat
- Nó xử lý các đầu vào kép và nổi khác nhau. Ngay cả thay đổi RoundingMode cũng không giúp được gì. Tôi không phải là chuyên gia nhưng nghĩ rằng nó có thể giúp một người như tôi. Đã kết thúc bằng cách sử dụng Math.round
thay thế. Xem bên dưới:
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)));
Đầu ra:
Double 0.7750 -> 0.78
Float 0.7750f -> 0.77
Rounding Up Double 0.7750 -> 0.78
Rounding Up Float 0.7750f -> 0.77
Thử cái này:-
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);