2009-08-20 27 views
9

Làm cách nào để ngăn chặn String.format("%.2f", doubleValue); khỏi làm tròn (thuật toán nửa vòng) thay vì chỉ cắt bớt nó?Ngăn vòng tròn trong String.format ("%. 2f", doubleValue) trong Java

ví dụ:

doubleValue = 123.459 

sau khi định dạng,

doubleValue = 123.46 

Tôi chỉ muốn loại bỏ các chữ số cuối cùng,

123.45 

Tôi biết có những cách khác để làm điều này, tôi chỉ muốn biết nếu điều này có thể sử dụng String.format.

Trả lời

12

Bạn luôn có thể thiết lập các chế độ làm tròn:

http://java.sun.com/javase/6/docs/api/java/math/RoundingMode.html

và sau đó sử dụng String.Format() HALF_EVEN được sử dụng bởi mặc định, nhưng bạn có thể thay đổi nó để TRẦN

một cách tiếp cận không linh hoạt khác sẽ là (nhưng đây không phải là những gì bạn đã hỏi):

DecimalFormat df = new DecimalFormat("###.##"); 
df.format(123.459); 
+0

Bạn nên làm gì nếu các chữ số ở bên trái dấu thập phân có thể có nhiều hơn 3 chữ số? Ngoài ra, có thể sử dụng nó trực tiếp trên một biến kép sẽ chuyển đổi nó thành một chuỗi, thay vì tạo một đối tượng mới không? –

+1

Tham khảo trong tương lai điều này là sai. Nếu số thập phân là dưới 6 thì sử dụng nửa vòng tròn, sử dụng vòng tròn HALF_EVEN khôn ngoan khác. Tôi thấy điều này vô lý! – Chad

3
doubleValue = 123.459 
doubleValue = Math.ceil(doubleValue*100)/100; 
+3

Nếu bạn muốn cắt ngắn, bạn không muốn sử dụng 'floor' cho các giá trị tích cực, và' ceil' cho những người tiêu cực ? – Rob

5

Có vẻ như câu trả lời là NO lớn. http://java.sun.com/javase/6/docs/api/java/util/Formatter.html#dndec "thì giá trị sẽ được làm tròn bằng cách sử dụng thuật toán nửa vòng"

Tôi thấy thật lạ khi họ làm điều đó vì NumberFormatter cho phép bạn đặt RoundingMode. Nhưng như bạn nói, có nhiều cách khác để làm điều đó. Rõ ràng nhất là trừ 0,005 từ giá trị của bạn trước tiên.

+1

Đây phải là câu trả lời được chấp nhận. @ DimitryK của câu trả lời ngụ ý rằng bạn có thể nhận được String.format() để cắt ngắn thay vì tròn, đó là không đúng sự thật. – Aranda

-1

sử dụng String.format ("% 2f.", DoubleValue - 0,005)

+4

Hãy cẩn thận với cách tiếp cận này !. 'String.format ("%. 2f ", 1.05 - .005)' kết quả trong '1.04', có lẽ do điểm không chính xác. – Aranda

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