Rounding
There is no support for floating point or decimal numbers in Numscript, which will always make sure non integer values resulting from monetary computations are balanced.
Practically, this means appropriately distributing the non integer allocation remainder to accounts. Numscript works by flooring any computed amount and subsequently spreading the remaining amount as fairly as possible starting from top to bottom.
In the example below:
send [COIN 99] (
source = @world
destination = {
50% to @rider
50% to @taxes
}
)
The @rider
account will receive COIN 50
and the @taxes
account COIN 49
. The opposite can be achieved by reversing the order of destinations:
send [COIN 99] (
source = @world
destination = {
50% to @taxes
50% to @rider
}
)
In a more complex example below, we are splitting 99 into 5 which would result in 19.8 allocated to each account. Numscript will first allocate 19 to every account, then attempt to distribute the remaining 4 evenly starting from @a
send [COIN 99] (
source = @world
destination = {
1/5 to @a
1/5 to @b
1/5 to @c
1/5 to @d
1/5 to @e
}
)
Which will resolve into the following postings:
[
{
source: "world",
destination: "a",
amount: 20,
asset: "COIN"
},
{
source: "world",
destination: "b",
amount: 20,
asset: "COIN"
},
{
source: "world",
destination: "c",
amount: 20,
asset: "COIN"
},
{
source: "world",
destination: "d",
amount: 20,
asset: "COIN"
},
{
source: "world",
destination: "e",
amount: 19,
asset: "COIN"
}
]