2013-02-07 38 views

Trả lời

9

Hoặc cast int s để double, hoặc chỉ sử dụng double s

Ví dụ:.

double[] arrayName = new double[10]; 
resultValue[0] = (14.0/49.0)*100; 

hay:

double[] arrayName = new double[10]; 
resultValue[0] = ((double)14/49)*100; 
+0

Không hoạt động vì một số lý do. Dưới đây là những gì tôi có: double [] arrayName = new double [10]; arrayName [0] = (đôi) (14/49) * 100; System.out.println ("Kết quả:" + mảngName [0]); ' Trả về 0.0. Xin lỗi về định dạng trong nhận xét này – batoutofhell

+0

Làm việc, cảm ơn @mmnumbp! Nhưng tôi phải làm như '((đôi) 14/(đôi) 49) * 100;' Phương pháp đầu tiên không hoạt động. – batoutofhell

+0

Ah xin lỗi, tôi đã đặt (gấp đôi) tại chỗ sai. Ở đây, tôi sẽ chỉnh sửa câu trả lời. –

2

Như thế này:

arrayName[0] = (14/49)*100.0; // put ".0" after any of the numbers 

hay này:

arrayName[0] = (double)(14/49)*100; 
4

Làm thế nào bạn nhìn thấy nó:

(double/double)*double 

Làm thế nào JVM nhìn thấy nó

(int/int)*int 

Từ số JLS. int để tăng gấp đôi là một chuyển đổi mở rộng. Từ §5.1.2:

Mở rộng chuyển đổi nguyên thủy không thông tin mất về tổng thể tầm quan trọng của một giá trị số.

[...]

chuyển đổi của một int hoặc một giá trị lâu nổi, hoặc của một giá trị thời gian để đôi, có thể dẫn đến việc mất chính xác đó là, kết quả có thể mất một số bit quan trọng nhất có giá trị là . Trong trường hợp này, kết quả là giá trị dấu phẩy động sẽ là phiên bản được làm tròn chính xác của giá trị số nguyên , sử dụng IEEE 754 chế độ vòng tròn gần nhất (§4.2.4).

Nếu bạn thay thế một trong những người có một chữ kép (như thêm .0 hoặc đúc một trong số họ để double và bạn sẽ nhận được kết quả bạn mong đợi.

3

Ít nhất một trong các giá trị của bạn phải là một double:

double[] arrayName = new double[10]; 
arrayName[0] = (14d/49d)*100; 
// or... 
// arrayName[0] = (14d/49)*100; 
// or... 
// arrayName[0] = (14/49d)*100; 
// or... 
// arrayName[0] = (14.0/49)*100; 
// or... 
// arrayName[0] = (14/49.0)*100; 
// or... 
// arrayName[0] = (14/(double)49)*100; 
// or... 
// arrayName[0] = ((double)14/49)*100; 
// or... 
// arrayName[0] = ((double)14/(double)49)*100; 
2

Như nhiều người khác đã chỉ, bạn chỉ cần thiết lập các hằng số như tăng gấp đôi:

arrayName[0] = (14*100)/49.0; 

Bằng cách này, bạn chỉ chuyển đổi tính toán cuối cùng thành gấp đôi thay vì bắt đầu, và giảm số lần tính toán dấu phẩy động.

Btw, nếu bạn muốn, bạn cũng có thể có kết quả dưới dạng số nguyên bằng cách sử dụng cùng phương pháp hoán đổi thứ tự và sử dụng phép nhân trước khi chia, ví dụ: 14 * 100/49 thay vì (14/49) * 100.

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