# How to do floating point arithmetic in substrate runtime

1 view

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 decentralized finance.

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?

by (29.8k points)

Substrate is a framework for blockchains, so 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.