2012-02-26 35 views
7

thể trùng lặp:
C programming divisionphận Integer luôn zero

lẽ câu hỏi của tôi rất đơn giản và ngu ngốc. Tôi muốn lưu trữ giá trị của một bộ phận, cụ thể là 1/x trong đó x là giá trị số nguyên .

int x = 17; 
double result = 1/x; 

tôi cố gắng để làm điều đó nhưng tôi luôn có được 0.000000 ... tôi cố gắng nhập một giá trị cố định trong x, ví dụ 1/17 nhưng luôn luôn nhận được giá trị như nhau .. Có chuyện gì vậy?

Trả lời

25

Bạn đang thực hiện phân chia số nguyên.

Hãy thử những điều sau đây và nó sẽ làm việc như mong đợi:

int x = 17; 
double result = 1.0/x; 

Các loại 1 trong biểu thức bạn có ở trên là int, và loại x là int. Khi bạn làm int/int, bạn nhận được một int trở lại. Bạn cần ít nhất một trong các loại liên quan đến điểm nổi (float hoặc double) để phân chia điểm trôi nổi xảy ra.

Không giống như trong Toán học, phân chia trong C++ có thể tham chiếu đến phân chia số nguyên cắt ngắn (những gì bạn đã làm) hoặc phân chia dấu chấm động (những gì tôi đã làm trong ví dụ của tôi). Hãy cẩn thận về điều này!

Trong ví dụ của tôi, rõ ràng những gì chúng tôi có là double/int -> double.

+3

Hoặc để làm rõ: 'double result = (double) 1/x;' – Nobody

+1

@Nobody Vì vậy, bạn có nghĩa là 'kết quả kép = 1.0/x;'? Vâng, trình biên dịch sẽ làm điều này cho bạn nhưng anh ta có thể cười nhạo bạn vì không nhận ra bản thân hai chữ. –

+1

@Christian Rau Nó là một ví dụ giáo khoa để làm cho loại tự động hiển thị nhiều hơn. Tất nhiên là lập trình viên, tôi luôn viết '1.0' vì nó ngắn hơn nhiều. – Nobody