Tôi đang gặp một số vấn đề khi định dạng số thập phân của một đôi. Nếu tôi có giá trị kép, ví dụ: 4.0, làm cách nào để định dạng số thập phân để thay vào đó là 4.00?
Tôi đang gặp một số vấn đề khi định dạng số thập phân của một đôi. Nếu tôi có giá trị kép, ví dụ: 4.0, làm cách nào để định dạng số thập phân để thay vào đó là 4.00?
Câu trả lời:
Một trong những cách sẽ là sử dụng NumberFormat .
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(4.0));
Đầu ra:
4,00
Với Java 8, bạn có thể sử dụng format
phương pháp ..: -
System.out.format("%.2f", 4.0); // OR
System.out.printf("%.2f", 4.0);
f
được sử dụng cho floating
giá trị điểm ..2
sau số thập phân biểu thị, số vị trí thập phân sau .
Đối với hầu hết các phiên bản Java, bạn có thể sử dụng DecimalFormat
: -
DecimalFormat formatter = new DecimalFormat("#0.00");
double d = 4.0;
System.out.println(formatter.format(d));
Sử dụng String.format :
String.format("%.2f", 4.52135);
Theo tài liệu:
Ngôn ngữ luôn được sử dụng là ngôn ngữ được trả về
Locale.getDefault()
.
Sử dụng String.format, bạn có thể làm điều này:
double price = 52000;
String.format("$%,.2f", price);
Lưu ý dấu phẩy khiến câu trả lời này khác với câu trả lời của @ Vincent
Đầu ra:
$52,000.00
Một tài nguyên tốt để định dạng là trang java chính thức về chủ đề này
Bạn luôn có thể sử dụng phương thức tĩnh printf from System.out
- sau đó bạn sẽ triển khai trình định dạng tương ứng; điều này giúp tiết kiệm dung lượng heap mà trong đó các ví dụ khác yêu cầu bạn làm.
Ví dụ:
System.out.format("%.4f %n", 4.0);
System.out.printf("%.2f %n", 4.0);
Tiết kiệm dung lượng heap là một phần thưởng khá lớn, tuy nhiên tôi có ý kiến rằng ví dụ này dễ quản lý hơn nhiều so với bất kỳ câu trả lời nào khác, đặc biệt là vì hầu hết các lập trình viên đều biết hàm printf từ C (Java thay đổi hàm / phương thức một chút).
out
là PrintStream
.
double d = 4.0;
DecimalFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
System.out.println(nf.format("#.##"));
new DecimalFormat("#0.00").format(4.0d);
Một phương pháp thay thế là sử dụng setMinimumFractionDigits
phương pháp từNumberFormat
lớp.
Ở đây về cơ bản bạn chỉ định bao nhiêu số bạn muốn xuất hiện sau dấu thập phân.
Vì vậy, một đầu vào của 4.0
sẽ tạo ra 4.00
, giả sử số tiền được chỉ định của bạn là 2.
Tuy nhiên, nếu thông tin Double
đầu vào của bạn chứa nhiều hơn số lượng được chỉ định, nó sẽ chiếm số lượng tối thiểu được chỉ định, sau đó thêm một chữ số nữa được làm tròn lên / xuống
Ví dụ: 4.15465454
với số lượng tối thiểu là 2 được chỉ định sẽ tạo ra4.155
NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(2);
Double myVal = 4.15465454;
System.out.println(nf.format(myVal));
Có nhiều cách bạn có thể làm điều này. Chúng được đưa ra dưới đây:
Giả sử số ban đầu của bạn được đưa ra dưới đây:
double number = 2354548.235;
Sử dụng NumberFormat:
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(number));
Sử dụng String.format:
System.out.println(String.format("%,.2f", number));
Sử dụng DecimalFormat và mẫu:
NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
DecimalFormat decimalFormatter = (DecimalFormat) nf;
decimalFormatter.applyPattern("#,###,###.##");
String fString = decimalFormatter.format(number);
System.out.println(fString);
Sử dụng DecimalFormat và mẫu
DecimalFormat decimalFormat = new DecimalFormat("############.##");
BigDecimal formattedOutput = new BigDecimal(decimalFormat.format(number));
System.out.println(formattedOutput);
Trong mọi trường hợp, đầu ra sẽ là: 2354548,23
Ghi chú :
Trong quá trình làm tròn, bạn có thể thêm RoundingMode
vào định dạng của mình. Dưới đây là một số chế độ làm tròn được đưa ra dưới đây:
decimalFormat.setRoundingMode(RoundingMode.CEILING);
decimalFormat.setRoundingMode(RoundingMode.FLOOR);
decimalFormat.setRoundingMode(RoundingMode.HALF_DOWN);
decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
decimalFormat.setRoundingMode(RoundingMode.UP);
Đây là hàng nhập khẩu :
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
Bạn có thể sử dụng bất kỳ một trong các phương pháp dưới đây
Nếu bạn đang sử dụng java.text.DecimalFormat
DecimalFormat decimalFormat = NumberFormat.getCurrencyInstance();
decimalFormat.setMinimumFractionDigits(2);
System.out.println(decimalFormat.format(4.0));
HOẶC LÀ
DecimalFormat decimalFormat = new DecimalFormat("#0.00");
System.out.println(decimalFormat.format(4.0));
Nếu bạn muốn chuyển nó thành định dạng chuỗi đơn giản
System.out.println(String.format("%.2f", 4.0));
Tất cả mã trên sẽ in ra 4.00
Hoạt động 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));
}
}
Lần nhập khẩu đầu tiên NumberFormat
. Sau đó thêm cái này:
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
Điều này sẽ cung cấp cho bạn hai chữ số thập phân và đặt một ký hiệu đô la nếu nó giao dịch với tiền tệ.
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));
}
}
Bạn có thể làm như sau:
double d = 4.0;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
##
thay vì00
Tôi biết rằng đây là một chủ đề cũ, nhưng nếu bạn thực sự muốn có dấu chấm thay vì dấu phẩy, chỉ cần lưu kết quả của bạn dưới dạng X, 00 thành Chuỗi và sau đó chỉ cần thay đổi nó trong một khoảng thời gian để bạn nhận được X.00
Cách đơn giản nhất là bạn chỉ cần sử dụng thay thế.
String var = "X,00";
String newVar = var.replace(",",".");
Đầu ra sẽ là X.00 mà bạn muốn. Ngoài ra, để dễ dàng, bạn có thể thực hiện tất cả cùng một lúc và lưu nó vào một biến kép:
Double var = Double.parseDouble(("X,00").replace(",",".");
Tôi biết rằng câu trả lời này không hữu ích ngay bây giờ nhưng có thể ai đó kiểm tra diễn đàn này sẽ tìm kiếm một giải pháp nhanh chóng như thế này.
String.format()
hoặcjava.text.Format
.