Ok, lets think this through 
For me, this would be the most unsurprising behavior. In rust, 10u32/3u32 is 3u32, so having 10u32 [some unit] / 3u32 [some unit] be 3u32 [some unit]would be consistent and logical.
For the pure unit computation, it wouldn’t matter, since the actual values wouldn’t be touched by the units.
Where it starts to matter is convertion between dimensions. That would be number type specific. I don’t know if its possible to abstract that completely, maybe we need number type specific constants for that. Example:
let converter = 1f64/1000f64 kilo;
let x = 4f64 m;
let y = x * converter; // is 4000 mm now
would be a compile time error. [10^0, m^1] is a different unit than [10^-3, m^1]. You’d have to manually convert one of the values so that the dimension line up. At that point, you change of of the values and take the decision what to preserve, range or precision.
That is correct. Non consistent unit systems are hard. Personally, i would treat it the same way like wie treat unicode. Have an consistent internal representation and convert at the borders. But i get that may be not satisfying.
If you have a consistent usage of mm, mm/s, mm/s^2 etc. i cannot imagine a situation where one ends up with km somewhere. You’d have to concisely divide by a nonsensical unit to do that.
If that should happen, the compiler would error out because all function in such a system would specify usage of mm and there would be no auto conversion from km to mm.