you can convert a float to a u32.
you cannot convert an function that calls async code into a sync function.
you cannot convert an function that calls async code into a sync function.
You can only convert an int to a float with significant caveats. It's not a general trivial conversion. More complicated types may not be convertible at all or behave in all sorts of exciting ways (including having arbitrary side effects).
The point is that none of that is different to async functions. Of course you have to know what to do with them for them to be useful, but there is no requirement for them to "infect" calling code.
u32 / float does not have the problem. It does not "bubble up", unless you want it to.