The rate at which frames or still images move is the frame speed or frames per second—the number of images loading in a single second. So, a frame rate of 24fps denotes that 24 images are loading in a single second.
This is the normal definition of frame rate or FPS, and legacy video codec decoders were used to decode video based on constant frame rate for example if the video is 30 FPS then at each second decoder will decode 30 frames.
But for newer video codecs (H.264 and HEVC) and due to bi-directional frame predictions, the calculation has shifted from constant frame rate to variable frame which involves DTS (decode time sequence) and PTS (playtime sequence) timestamps based on clock frequency. So it is not necessary for those videos to decode N number of frames per second, they can decode N-1 or N+1 number of frames at any second based on their DTS.
The non-integer number that you are seeing as frame rate is actually the avg frame rate for those videos and that is why it is non-integer.