How can I do math on floating point values in substrate runtime. As a simple example imagine I want to keep track of an interest rate in a decentralized finance application. I can prototype by using the percentage as an integer:
let rate = 2;
let dividend = capital * rate / 100;
But what if my interest rate is 2.5% or 2.4554%? Is there any standard way to do floating point arithmetic?
Since Substrate is a framework for blockchains, it is important that each node arrives at the same deterministic result for consensus. Floating point arithmetic is not deterministic and so for this reason is not allowed in Substrate. The standard way of handling arithmetic where you will need decimal places is to use one of the in-built primitive types for handling fixed point arithmetic. Fixed point arithmetic is safe for Substrate since it represents all rationals as a fraction and always resolves to a deterministic result. The two types which are used to handle fixed point arithmetic are the Permill and the Perbill types.