Kiểm tra một số float có phải là số nguyên hay không

Như tít ạ.

Bài tập của mình là xây dựng một hàm tính toán.

Nhưng vấn đề là thầy giáo bắt mở rộng cho cả số thực

Mà số thức thì không có phép toán lấy số dư ( % ấy)

Bây giờ mình muốn kiểm tra xem số nhập vào là nguyên hay thực thì làm sao ạ?

Lấy x - (int) x thì ra phần lẻ của x.

5 Likes

Đúng rồi vậy mà mình không nghĩ ra ^^!

câu hỏi của bạn khá thú vị mình sẽ chỉ ra điều thú vị ở đây:

  1. làm sao để kiểm tra số nhập vào là số nguyên hay số thực
    ? muốn scan số thực thì phải %f
    ? muốn scan số nguyên thì %d
    như vậy bạn phải scan %f thì mới scan được số thực. và nếu có nhập số nguyên thì nó vẫn là số thực vì sao tập hợp R (số thực ) chứa tập hợp Z (số nguyên) vì vậy 1 số nguyên chắc chắn là số thực
1 Like

Cách này không xác định được 1 số có kiểu int hay float
Ví dụ a=9.0
Có thể người dùng nhìn 9.0 = 9 = số int
Nhưng trên máy tính 9 int khác 9.0 float
Nếu 1 hàm nào đó chỉ tính toán dựa vào giá trị của biến thì không sao. Nhưng nếu tính toán còn dựa vào kiểu của biến thì fail

2 Likes

Tại thớt viết thế chứ làm sao mà kiểm tra được :smiley: kiểu do mình đọc ra chứ C mà, runtime làm sao mà biết.

Chắc thớt sẽ dùng float để nhận luôn số nguyên rồi, giờ tách phần lẻ ra là biết ngay.

1 Like

cảm ơn các bạn.

Đề bài của mình là xây dựng máy tính toán cơ bản. Nhưng mà với phép tính % thì chỉ tính số nguyên cho nên nếu mình khai báo số thực ban đầu thì lại bị báo lỗi chỗ đó.

fload check = x - ( (int) x );

Nếu check = 0 thì là số nguyên, nếu khác 0 thì là số thực :slight_smile:

1 Like

mình nghĩ như thế chỉ áp dụng số trong phạm vi số kiểu int, nếu lớn hơn mà ép về kiểu int thì thua rồi

float thì tầm int thôi ko hơn được vì chỉ có 23 bit giá trị thôi. Quá 2^23-1 là bắt đầu ko phân biệt được rồi, do bản chất của float.

Thực ra thớt vẫn có thể sử dụng hàm fmod.

2 Likes

trong math.h có hàm fmod() có thể check được kiểu đấy

if (fmod(f, 1) == 0 ) 
{
    cout << "type of f is int";
}
else
  cout << "float";

nhưng hàm này phải trả giá hiệu năng chương trình

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?