Extracting just the decimal part of a float

I'm afraid you have exhausted the accuracy of the float. It just can't tell the difference between those numbers. The binary representation just ran out of bits.

The hexadecimal representation of 1234.5677 is 0x449A522B. 1234.5678 is 0x449A522B. 1234.5679 is 0x449A522C.

In order to get more accuracy, you're going to have to use more space. Normally in C, you could just double the accuracy by declaring them to be doubles, but unfortunately when I tried that it didn't make one bit of difference. Literally. Apparently doubles are implemented as floats. That's useless.

You could try implementing your algorithm as long integers and just multiply everything by 10000L, but you're getting close to the limits there as well.