2011-02-08 13 views

Trả lời

78

Bởi vì chuyển đổi nổi sẽ xảy ra sau khi quá trình phân chia đã được thực hiện. Bạn cần:

float percentage = ((float) totalOptCount)/totalRespCount; 

Bạn sẽ có thể để định dạng sử dụng một cái gì đó như:

String str = String.format("%2.02f", percentage); 
+0

Float (phần trăm)) trong Float này hiển thị lỗi – kiran

+0

Chuỗi str = String.format ("% 2.02f", (phao) phần trăm); thay đổi như thế này. nó hoạt động, cảm ơn thư giãn – kiran

1
String.format("%2.02f", (float)totalOptCount/totalRespCount); 
+0

đã làm nó lưu trữ, trong đó biến – kiran

+0

Nhìn vào mã của thư giãn, nó giải thích tốt hơn. Mã của tôi chỉ là để cho bạn biết làm thế nào để làm điều đó trong một dòng, bạn có thể lưu trữ kết quả trong một biến nếu bạn muốn – Dalmas

2

phận Integer (trong đó bao gồm dài, ngắn, byte, char, int) trong Java luôn trả về một int (hoặc dài, nếu một trong các tham số dài), làm tròn về 0. Chuyển đổi của bạn xảy ra sau khi tính toán này.

(Câu hỏi định dạng đã được trả lời bằng những câu trả lời khác - Hoặc bạn cũng có thể có một cái nhìn tại java.text.NumberFormat, đặc biệt java.text.DecimalFormat.)

8

Nếu bạn đang sử dụng int giá trị, sử dụng a double có thể là lựa chọn tốt hơn và có ít lỗi làm tròn hơn. float có thể đại diện cho các giá trị int mà không có lỗi lên đến ~ 16 triệu. double có thể đại diện chính xác tất cả các giá trị int.

double percentage =(double) totalOptCount/totalRespCount; 

Tỷ lệ phần trăm thường được nhân với 100, nghĩa là bạn có thể bỏ dàn diễn viên.

double percentage = 100.0 * totalOptCount/totalRespCount; 
+0

Thay đổi 100 đến 100.0 đã làm các trick, tại sao là điều đó? Tôi đang sử dụng gấp đôi. – luizfelippe

+1

@luizfelippe một sai lầm phổ biến là thực hiện một phép toán số nguyên và đưa kết quả đó thành một đôi hoặc float. Bạn cần phải thực hiện thao tác như là một double tức là '(double) (a/b)' khi 'a' và' b' là số nguyên, không giống như '(double) a/b' Bạn muốn sau này. –

1

để định dạng một đôi và in ra theo phần trăm, bạn có thể sử dụng sử dụng

System.out.println(new DecimalFormat("##.##").format(yourDouble) + "%")); 
0

(totalOptCount/totalRespCount)

đây cả cổ tức và ước là loại int có nghĩa chúng sẽ chỉ cho phép các giá trị số nguyên và câu trả lời của phương trình như vậy sẽ luôn là một số nguyên theo nghĩa đen.

nếu tôi phá vỡ này nó sẽ là một cái gì đó như dưới đây

(double)(500/1500)

Theo tính toán thực tế, 500/1500 sẽ cung cấp cho bạn 0.33333 nhưng trình biên dịch sẽ chuyển đổi này vào nguyên nghĩa đen vì cả hai toán hạng là kiểu int

(double)(0)


biên dịch được một hướng dẫn để cast giá trị 0 này sẽ tăng gấp đôi, do đó bạn có 0.0 kết quả

0.0

và sau đó bạn có thể thay đổi kết quả thành bất kỳ định dạng nào được suýt nữa bởi @Zach Janicki.

hãy nhớ nếu cả hai toán hạng cùng loại so với kết quả sẽ cùng loại.