2012-03-22 31 views
14

Tôi muốn có một tham số trong một chuỗi trong strings.xml và tham số này phải là một giá trị kép. Vì vậy, tôi sử dụng %1$f. Ở đây - http://developer.android.com/reference/java/util/Formatter.html có rất nhiều ví dụ, nhưng nếu tôi muốn có một vài thông số double/float và tôi muốn chỉ số thứ hai có 2 chữ số sau .? Tôi đã cố gắng sử dụng các kết hợp như %2$.2f hoặc %2.2$f. Họ cũng không làm việc. %.1f cũng không hoạt động. Vì vậy, không ai biết làm thế nào tôi có thể "tùy chỉnh" một giá trị float/double bên trong một strings.xml? Cảm ơn.Tham số kép với 2 chữ số sau dấu chấm trong strings.xml?

Trả lời

-5

Nếu là tôi, tôi muốn lưu trữ các giá trị trong các nguồn tài nguyên như các giá trị đơn giản, và sau đó sử dụng phương pháp định dạng để kiểm soát như thế nào họ đang hiển thị, gần như thế này

public String formatFigureTwoPlaces(float value) { 
    DecimalFormat myFormatter = new DecimalFormat("##0.00"); 
    return myFormatter.format(value); 
} 

public String formatFigureOnePlace(float value) { 
    DecimalFormat myFormatter = new DecimalFormat("##0.0"); 
    return myFormatter.format(value); 
} 
+26

Cảm ơn, anh chàng, nhưng tôi phải giám sát ... '% $ 1 .2f' làm việc là tốt. – lomza

+2

Nhận xét ở đây là câu trả lời thực sự! Bạn nên đặt nó như một câu trả lời cho câu hỏi này. Tôi gần như không nhìn thấy nó. – accordionfolder

+0

câu trả lời của Iomza trong các nhận xét là giải pháp thực sự – Kachi

-2

tôi bây giờ mà trả lời này là đến quá muộn ... nhưng tôi hy vọng để có thể giúp đỡ người khác:

Android hút với nhiều tham số thay thế khi bạn muốn số thập phân và định dạng này trong phong cách chung% a.bf

giải pháp tốt nhất mà tôi đã tìm thấy (và chỉ dành cho loại resourc này es) được đặt các thông số thập phân như chuỗi% n $ s và trong mã áp dụng chuyển đổi của tôi với String.format (...)



Ví dụ:


CÁCH NÀO KHÔNG ĐÚNG:

// Trong tập tin xml:

<string name="resource1">You has a desviation of %1$s and that is a %2$.2f%% percentage.</string> 

// Và trong file java

String sresult = getString(R.string.resource1, svalue, spercentage); // <-- exception! 

Giải pháp này là chính xác về mặt kỹ thuật nhưng không chính xác do hệ thống nguồn lực thay android nên dòng cuối cùng sẽ tạo ra một ngoại lệ.



ĐÚNG CÁCH/GIẢI PHÁP:

Đơn giản chỉ cần chuyển đổi các tham số thứ hai vào một String.

<string name="resource1">You has a desviation of %1$s and that is a %2$s percentage.</string> 

Và bây giờ trong các mã:

... 

    // This is the auxiliar line added to solve the problem 
    String spercentage = String.format("%.2f%%",percentage); 

    // This is the common code where we use the last variable. 
    String sresult = getString(R.string.resource1, svalue, spercentage); 
+0

Loại 'spercentage' trong ví dụ" không chính xác "của bạn là gì? Tôi đoán (như @Nik Reiman chỉ ra) rằng đó là một "String" - tức là không có thắc mắc bạn đang nhận được một ngoại lệ khi cố gắng vượt qua nó như là một phao (tại '% 2 $ .2f'). "Câu trả lời" này không đầy đủ và gây hiểu lầm. – BadCash

+0

Tôi cũng không thể nhận được định dạng nổi để làm việc từ một nguồn tài nguyên chuỗi, và có tôi đi qua một phao. Tôi sử dụng "% 1 $ 0.6f" trong tài nguyên chuỗi, và tôi nhận được một ngoại lệ: java.util.MissingFormatWidthException:% 01 $ .6f để nó bị xáo trộn bằng cách nào đó. Câu trả lời này là chính xác. – Aaron

64

Chỉ cần thêm vào @ David Airam của câu trả lời ở đây; giải pháp "không chính xác" mà anh ấy đưa ra thực sự đúng, nhưng với một chút tinh chỉnh.Các tập tin XML nên chứa:

<string name="resource1">Hello string: %1$s, and hello float: %2$.2f.</string> 

Bây giờ trong mã Java:

String svalue = "test"; 
float sfloat= 3.1415926; 
String sresult = getString(R.string.resource1, svalue, sfloat); 

Trường hợp ngoại lệ mà @ David Airam báo cáo là từ cố gắng giơ một String thành một specifier định dạng với %f, đòi hỏi một loại điểm nổi. Sử dụng float và không có ngoại lệ như vậy.

Ngoài ra, bạn có thể sử dụng Float.valueOf() để chuyển đổi Chuỗi thành dấu phẩy trong trường hợp dữ liệu đầu vào của bạn ban đầu là một chuỗi (ví dụ: từ EditText hoặc thứ gì đó). Tuy nhiên, bạn nên luôn luôn thử/bắt valueOf() hoạt động và xử lý trường hợp NumberFormatException, vì ngoại lệ này không được chọn.

+0

Cảm ơn! Đã lưu thời gian của tôi –

0

% công việc .1f đối với tôi nếu bạn muốn chỉ hiển thị 1 chữ số sau ''

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