2010-03-29 103 views

Trả lời

158

Bạn có thể sử dụng phương pháp printf, như vậy:

System.out.printf("%.2f", val); 

Nói tóm lại, cú pháp %.2f nói với Java để trở biến của bạn (val) với 2 chữ số thập phân (.2) trong đại diện thập phân của một floating- số điểm (f) từ đầu công cụ định dạng (%).

Có những nhân vật chuyển đổi khác mà bạn có thể sử dụng ngoài f:

  • d: số nguyên thập phân
  • o: số nguyên bát phân
  • e: dấu chấm động trong ký hiệu khoa học
+8

Hãy cẩn thận như String.format phụ thuộc vào cấu hình cục bộ hiện tại của bạn, bạn có thể không nhận được dấu chấm làm dấu tách. Thích sử dụng 'String.format (java.util.Locale.US,"%. 2f ", val);' – Gomino

+1

@gomino Tại sao không 'Locale.FRANCE'? – erickson

+0

@erickson ở Pháp dấu phân cách thập phân là dấu phẩy và không phải là dấu chấm. – Gomino

130

Bạn có thể sử dụng DecimalFormat. Một cách để sử dụng:

DecimalFormat df = new DecimalFormat(); 
df.setMaximumFractionDigits(2); 
System.out.println(df.format(decimalNumber)); 

Một cách khác là xây dựng nó bằng định dạng #.##.

Tôi thấy tất cả các tùy chọn định dạng ít có thể đọc được hơn gọi phương thức định dạng, nhưng đó là vấn đề ưu tiên.

+10

gì đã xảy ra với 'System.out.printf' cú pháp (, giá trị "% 2f.")? Nó vẫn còn xung quanh? –

+5

. nó vẫn là một lựa chọn - bạn có thể phục hồi câu trả lời của bạn;) – Bozho

+0

Có vẻ như đó là tùy chọn của tôi, vì tôi không biết cách sử dụng DecimalFormat nữa :) Cảm ơn! –

34
double d = 1.234567; 
DecimalFormat df = new DecimalFormat("#.##"); 
System.out.print(df.format(d)); 
+4

Xin chào Kevin, nếu nếu nhập 10.0000, tôi chỉ nhận được 10. Nếu tôi muốn hiển thị 10,00 thì làm thế nào tôi có thể làm gì? – Mdhar9e

+1

@ Mdhar9e sử dụng 'DecimalFormat df = new DecimalFormat (" 0.00 ");' –

4

Nhìn vào DecimalFormat

Dưới đây là một ví dụ từ hướng dẫn:

DecimalFormat myFormatter = new DecimalFormat(pattern); 
    String output = myFormatter.format(value); 
    System.out.println(value + " " + pattern + " " + output); 

Nếu bạn chọn một mô hình như thế nào, bạn sẽ nhận được hai chữ số thập phân, và tôi nghĩ rằng các giá trị được làm tròn "### ##." lên. Bạn sẽ muốn xem liên kết để có định dạng chính xác mà bạn muốn (ví dụ: bạn có muốn số không theo sau)

57

Tôi khuyên bạn nên sử dụng String.format() nếu bạn cần giá trị dưới dạng String trong mã của mình.

Ví dụ, bạn có thể sử dụng String.format() theo cách sau:

float myFloat = 2.001f; 

String formattedString = String.format("%.02f", myFloat); 
+8

"% .02f" và "% .2f" là điều tương tự – Borzh

2

OK - str nổi.

package test; 

import java.text.DecimalFormat; 

public class TestPtz { 
    public static void main(String[] args) { 
    String preset0 = "0.09,0.20,0.09,0.07"; 
    String[] thisto = preset0.split(",");  
    float a = (Float.valueOf(thisto[0])).floatValue(); 
    System.out.println("[Original]: " + a); 
    a = (float) (a + 0.01); 

    // Part 1 - for display/debug 
    System.out.printf("[Local]: %.2f \n", a); 
    // Part 2 - when value requires to be send as it is 
    DecimalFormat df = new DecimalFormat(); 
    df.setMinimumFractionDigits(2); 
    df.setMaximumFractionDigits(2); 
    System.out.println("[Remote]: " + df.format(a)); 

    } 
} 

Output:

run: 
[Original]: 0.09 
[Local]: 0.10 
[Remote]: 0.10 
BUILD SUCCESSFUL (total time: 0 seconds) 
6

Một thủ thuật đơn giản là để tạo ra một phiên bản ngắn hơn của biến của bạn bằng cách nhân nó với ví dụ100, làm tròn nó và chia nó bằng 100.0 một lần nữa. Bằng cách này bạn có thể tạo một biến, với 2 chữ số thập phân:

double new_variable = Math.round(old_variable*100)/100.0; 

này "rẻ tiền lừa" luôn đủ tốt cho tôi, và làm việc tại bất kỳ ngôn ngữ (tôi không phải là một người Java, chỉ cần học nó) .

+1

Điều này sai, nhiều số sẽ lặp lại các số trong biểu diễn nổi sau khi bạn chia 100. Do đó không phải là hai chữ số thập phân. – matt

4
float floatValue=22.34555f; 
System.out.print(String.format("%.2f", floatValue)); 

Đầu ra là 22,35. Nếu bạn cần 3 dấu thập phân, hãy đổi nó thành "% .3f".

1

chương trình đơn giản nhỏ cho cuộc biểu tình:

import java.io.*; 
import java.util.Scanner; 

public class twovalues { 

    public static void main(String args[]) { 

     float a,b; 
     Scanner sc=new Scanner(System.in); 
     System.out.println("Enter Values For Calculation"); 

     a=sc.nextFloat(); 
     b=sc.nextFloat(); 

     float c=a/b; 
     System.out.printf("%.2f",c); 
    } 
} 
7
float f = 102.236569f; 
DecimalFormat decimalFormat = new DecimalFormat("#.##"); 
float twoDigitsF = Float.valueOf(decimalFormat.format(f)); // output is 102.24 
+2

Tùy thuộc vào ngôn ngữ bạn có thể nhận được dấu phẩy. Nếu bạn muốn có dấu phân tách dấu chấm, hãy sử dụng dấu thập phân này: DecimalFormat ("#. ##", DecimalFormatSymbols (Locale.US)) – DPM

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