I actually can't think of a single language that doesn't allow you to multiply an integer and a floating point value, yielding a floating point result.
In Rust, all type coercion must be explicit, you can't even add different integer types:
5i64 + 5i32 // WONT compile
5i64 + 5i32 as i64 // will work