Well, if you have a number 0.7, multiply it by 2 and get 1.4 they call that 1 a carry. Recording it across the decimal point probably means appending it to the end of the result.
const & is used for objects that are too big to copy (and will not be changed by the function). There is no gain in passing system as const int&. A plain int would be fine (or better).
Instead of static_cast<int>(fraction), you could write (int)fraction.
Note that some (many in binary) of the fractions you try will be infinite (periodic). Your code does not handle such case. You should have a set maximum number of digits.
That's for you to decide.
If you want to find the period of the fraction, I really have no idea how (except the brutal approach) and it's probably quite complicated..