String.format () để định dạng kép trong java


178

Làm cách nào tôi có thể sử dụng String.format (định dạng String, X) để định dạng gấp đôi như sau ???

2354548.235 -> 2.354.548,23

Cảm ơn!

Câu trả lời:


295
String.format("%1$,.2f", myDouble);

String.format tự động sử dụng ngôn ngữ mặc định.


36
Bạn cũng có thể sử dụng một ngôn ngữ cụ thể bằng cách sử dụngString.format(Locale.GERMAN, "%1$,.2f", myDouble);
Olivier Grégoire

13
Nếu có nhiều hơn một lần để định dạng, hãy sử dụng% 1,% 2, v.v. Ví dụ: String.format ("% 1 $, 2f,% 2 $, 2f", myDouble, aDouble)
Moesio

4
Tôi tin rằng "% 1 $" là tùy chọn trong trường hợp này. Hoạt động với tôi chỉ với "%, 2f" là chuỗi định dạng.
Matt Passell

5
Vâng, Matt đúng. %1, %2và như vậy có thể được sử dụng để sắp xếp lại đầu ra dựa trên chỉ mục của các đối số đầu vào của bạn. Xem này . Bạn có thể bỏ qua chỉ mục và thứ tự mặc định sẽ được giả định bởi trình định dạng.
praneetloke

1
Bạn nên đưa ra một lời giải thích những gì các phần khác nhau có nghĩa.
Mitulát báti 25/03/19

41
String.format("%4.3f" , x) ;

Điều đó có nghĩa là chúng ta cần tổng cộng 4 chữ số trong ans, trong đó có 3 chữ số sau số thập phân. Và f là định dạng định dạng của double. x có nghĩa là biến mà chúng ta muốn tìm nó. Đã làm cho tôi . . .


1
Tôi nghĩ nó có nghĩa là nó sẽ là biến thứ tư trong các đối số theo sau và có 3 vị trí sau số thập phân.
Michael Fulton

@MichaelFulton Thật không dễ dàng gì: String.format("%014.3f" , 58.656565)-> 0000000058,657: Tổng cộng có 14 ký hiệu: 8 số 0 và 5 số và 1 dấu phẩy. Vì vậy, trong trường hợp này, số 14 có nghĩa là tổng số ký hiệu ( các ký hiệu phụ được thay thế bằng số 0 đứng đầu, có thể không có, sau đó nó sẽ thay thế bằng khoảng trắng) trong chuỗi kết quả . Phần .3hoàn toàn độc lập ở đây.
phân tích cú pháp

Tuy nhiên ở đây: String.format("%014.3f" , 58.656565)-> 58,657. Tôi lấy nó bởi vì sở thích đi đến .3fphần: đầu tiên nó in số có 3 chữ số thập phân và sau khi có các ký hiệu còn lại, nó sẽ in các khoảng trắng hàng đầu (hoặc số 0 / bất cứ thứ gì). Trong trường hợp này, số là 2 + 3 + 1 = 6 ký hiệu và chúng tôi chỉ muốn in 4, vì vậy chắc chắn không có khoảng trắng thừa.
phân tích cú pháp

24

Nếu bạn muốn định dạng nó bằng các ký hiệu được đặt thủ công, hãy sử dụng:

DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setDecimalSeparator('.');
decimalFormatSymbols.setGroupingSeparator(',');
DecimalFormat decimalFormat = new DecimalFormat("#,##0.00", decimalFormatSymbols);
System.out.println(decimalFormat.format(1237516.2548)); //1,237,516.25

Định dạng dựa trên địa phương được ưa thích, mặc dù.


3
Câu trả lời hữu ích! Tuy nhiên, câu cuối cùng "Định dạng dựa trên ngôn ngữ được ưa thích, mặc dù" không có ý nghĩa nếu không có ngữ cảnh. Có những trường hợp sử dụng khá tốt trong đó bạn KHÔNG nên sử dụng định dạng dựa trên miền địa phương, khi bạn muốn tạo một định dạng cụ thể của Chuỗi. Ví dụ: bạn đang thực hiện xuất dữ liệu của mình sang tệp bên ngoài và bạn muốn có toàn quyền kiểm soát định dạng, không phụ thuộc vào ngôn ngữ hiện tại (hoặc bất kỳ).
Honza Zidek

20

mã được trích xuất từ liên kết này ;

Double amount = new Double(345987.246);
NumberFormat numberFormatter;
String amountOut;

numberFormatter = NumberFormat.getNumberInstance(currentLocale);
amountOut = numberFormatter.format(amount);
System.out.println(amountOut + " " + 
                   currentLocale.toString());

Đầu ra từ ví dụ này cho thấy định dạng của cùng một số khác nhau như thế nào với Locale:

345 987,246  fr_FR
345.987,246  de_DE
345,987.246  en_US

13
public class MainClass {
   public static void main(String args[]) {
    System.out.printf("%d %(d %+d %05d\n", 3, -3, 3, 3);

    System.out.printf("Default floating-point format: %f\n", 1234567.123);
    System.out.printf("Floating-point with commas: %,f\n", 1234567.123);
    System.out.printf("Negative floating-point default: %,f\n", -1234567.123);
    System.out.printf("Negative floating-point option: %,(f\n", -1234567.123);

    System.out.printf("Line-up positive and negative values:\n");
    System.out.printf("% ,.2f\n% ,.2f\n", 1234567.123, -1234567.123);
  }
}

Và in ra:

3 (3) +3 00003
Định dạng
dấu phẩy
động mặc định: 1234567,123000 Dấu phẩy động có dấu phẩy: 1.234.567,123000 Mặc định dấu phẩy động âm: -1.234.567,123000
Negative dấu chấm động tùy chọn: (1.234.567, 123000)

Các giá trị dương và âm thẳng hàng:
1.234.567,12
-1.234.567,12


2

Có nhiều cách bạn có thể làm điều này. Những người được đưa ra dưới đây:

Giả sử số ban đầu của bạn được đưa ra dưới đây: số kép = 2354548.235;

NumberFormatChế độ sử dụng và làm tròn

NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
    DecimalFormat decimalFormatter = (DecimalFormat) nf;
    decimalFormatter.applyPattern("#,###,###.##");
    decimalFormatter.setRoundingMode(RoundingMode.CEILING);

    String fString = decimalFormatter.format(number);
    System.out.println(fString);

Sử dụng định dạng chuỗi

System.out.println(String.format("%1$,.2f", number));

Trong mọi trường hợp, đầu ra sẽ là: 2354548.24

Lưu ý :

Trong quá trình làm tròn bạn có thể thêm RoundingModevào định dạng của bạn. 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);

Dưới đâ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;

1

Sử dụng DecimalFormat

 NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
 DecimalFormat decimalFormatter = (DecimalFormat) nf;
 decimalFormatter.applyPattern("#,###,###.##");
 String fString = decimalFormatter.format(myDouble);
 System.out.println(fString);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.