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 Width
và Height
để 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.
}
Nguồn
2013-05-14 02:08:57
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'. –