2013-05-14 27 views
6

Về cơ bản tôi có hai biến:Làm thế nào tôi có thể kiểm tra xem một đôi có một phần phân đoạn?

double halfWidth = Width/2; 
double halfHeight = Height/2; 

Khi họ đang được chia cho 2, họ sẽ hoặc là số nguyên hoặc số thập phân. Làm thế nào tôi có thể kiểm tra xem họ có phải là một số nguyên hay một .5?

+2

Giá trị số nguyên hoặc giá trị dấu phẩy 'Chiều rộng' và' Chiều cao '? Trừ khi chúng là 'float' hoặc' double', bạn sẽ luôn nhận được kết quả số nguyên vì phép chia được thực hiện trên cơ sở các kiểu 'Width' hoặc' Height' và 2 (tất cả kiểu số nguyên theo giả thuyết này), và kết quả sau đó được chuyển thành một 'double'. –

Trả lời

13

Bạn có thể sử dụng modf, điều này sẽ là đủ:

double intpart; 

if(modf(halfWidth, &intpart) == 0) 
{ 
// your code here 
} 
1

Trước tiên, bạn cần phải chắc chắn rằng bạn đang sử dụng double-chính xác floating-point toán:

double halfWidth = Width/2.0; 
double halfHeight = Height/2.0; 

Bởi vì một của toán hạng là một đôi (cụ thể là, 2.0), điều này sẽ buộc trình biên dịch chuyển đổi WidthHeight để tăng gấp đôi trước khi thực hiện phép toán (giả sử chúng chưa là double s). Sau khi được chuyển đổi, phép chia sẽ được thực hiện trong điểm động kép chính xác. Vì vậy, nó sẽ có một số thập phân, nếu thích hợp.

Bước tiếp theo là chỉ cần kiểm tra bằng modf.

double temp; 
if(modf(halfWidth, &temp) != 0) 
{ 
    //Has fractional part. 
} 
else 
{ 
    //No fractional part. 
} 
+0

@JonathanLeffler: Có cần phải không? Bạn đang chia một số nguyên cho 2; nếu nó không phải 0, nó phải là 0,5. –

+0

OK - Tôi thấy bạn đang giải thích các yếu tố đầu vào hơi khác so với tôi và do đó sẽ đưa ra một câu trả lời khác (câu trả lời hợp lệ cho kỳ vọng của bạn về các yếu tố đầu vào). Lặng lẽ lờ tôi đi ... Tôi sẽ đi ... –

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