2011-01-19 74 views
12

Tôi có một biến kiểu double, tôi cần phải in nó trong tối đa 3 số thập phân chính xác nhưng nó không nên có bất kỳ số không trailing ...số Formatting Floating Point

ví dụ. Tôi cần

2.5 // not 2.500 
2 // not 2.000 
1.375 // exactly till 3 decimals 
2.12 // not 2.120 

Tôi đã thử sử dụng DecimalFormatter, Tôi có làm sai không?

DecimalFormat myFormatter = new DecimalFormat("0.000"); 
myFormatter.setDecimalSeparatorAlwaysShown(false); 

Cảm ơn. :)

Trả lời

21

Hãy thử mô hình "0.###" thay vì "0.000":

import java.text.DecimalFormat; 

public class Main { 
    public static void main(String[] args) { 
     DecimalFormat df = new DecimalFormat("0.###"); 
     double[] tests = {2.50, 2.0, 1.3751212, 2.1200}; 
     for(double d : tests) { 
      System.out.println(df.format(d)); 
     } 
    } 
} 

đầu ra:

2.5 
2 
1.375 
2.12 
+0

@ st0le, chúc mừng! –

4

Sử dụng NumberFormat lớp.

Ví dụ:

double d = 2.5; 
    NumberFormat n = NumberFormat.getInstance(); 
    n.setMaximumFractionDigits(3); 
    System.out.println(n.format(d)); 

Output sẽ là 2.5, không 2.500.

6

Giải pháp của bạn gần như chính xác, nhưng bạn nên thay thế số 0 ở dạng số thập phân bằng dấu "#".

Vì vậy, nó sẽ giống như thế này:

DecimalFormat myFormatter = new DecimalFormat("#.###"); 

Và dòng đó không phải là necesary (như decimalSeparatorAlwaysShownfalse theo mặc định):

myFormatter.setDecimalSeparatorAlwaysShown(false); 

Dưới đây là tóm tắt ngắn gọn từ javadocs:

Symbol Location Localized? Meaning 
0 Number Yes Digit 
# Number Yes Digit, zero shows as absent 

Và liên kết tới javadoc: DecimalFormat

+0

+1 để biết thêm thông tin. – st0le

+0

Làm thế nào để in số dấu chấm động vì nó là 220,90? –