Closed
Description
There is no natural return type for Decimal * Uint128. It could be Decimal, Uint128 or even Uint512. See https://stackoverflow.com/a/44552464/2013738 for a more elaborate description of the problem.
The choice of Decimal * Uint128 = Uint128 has no reason other than its first use case. It has often confused users who expect Decimal * Uint128 = Decimal.
The better solution for the integer math is something like:
let a: Uint128;
let b: Decimal;
let c = a.multiply_ratio(b.numerator(), b.denominator());
The better solution for the decimal math is something like:
let a: Uint128;
let b: Decimal;
let c = Decimal::try_into(a)? * b;