2012-09-11 43 views
17

Trong C, câu lệnh printf() cho phép độ dài chính xác được cung cấp trong danh sách tham số.java tương đương với printf ("% *. * F")

printf("%*.*f", 7, 3, floatValue); 

nơi dấu hoa thị được thay thế bằng giá trị đầu tiên và thứ hai, tương ứng.

Tôi đang tìm kiếm tương đương trong Android/Java; String.format() ném một ngoại lệ.

CHỈNH SỬA: Cảm ơn, @Tenner; nó thực sự hoạt động.

Trả lời

14

tôi sử dụng

int places = 7; 
int decimals = 3; 

String.format("%" + places + "." + decimals + "f", floatValue); 

Một chút xấu xí (và nối chuỗi làm cho nó không hoạt động tốt), nhưng nó hoạt động.

3
System.out.print(String.format("%.1f",floatValue)); 

này in ra floatValue với 1 chữ số thập phân chính xác

+0

Bạn có thể sử dụng System.out.format (...) trực tiếp tại đây – RNJ

+0

@BelusC Có cả hai. Xem http://docs.oracle.com/javase/1.5.0/docs/api/java/io/PrintStream.html#format%28java.lang.String,%20java.lang.Object...%29 – RNJ

0

của nó như thế này ...

%AFWPdatatype 

A - Số Arguments

F - Flags

W - Chiều rộng

P - Precision

String.format("%.1f",float_Val);

1

Bạn có thể định dạng các định dạng:

String f = String.format("%%%d.%df", 7, 3); 
System.out.println(f); 
System.out.format(f, 111.1111); 

Sản lượng này sẽ:

%7.3f 
111,111 

Bạn cũng có thể sử dụng một chút trợ giúp như thế này:

public static String deepFormatter(String format, Object[]... args) { 
    String result = format; 
    for (int i = 0; i != args.length; ++i) { 
     result = String.format(result, args[i]); 
    } 

    return result; 
} 

Cuộc gọi sau đây sẽ tương đương với mã ở trên và trả lại 111,111.

deepFormatter("%%%d.%df", new Object[] {7, 3}, new Object[] {111.1111}); 

Nó không đẹp như printf và định dạng đầu vào có thể trở nên lộn xộn, nhưng bạn có thể làm được nhiều hơn với nó.

Các vấn đề liên quan