Ah, divide… This one is dozy. I’m not sure this is readily possible since Mikrotik doesn’t support “floating point” numbers (e.g. with decimal point in US). They do integers, which are whole/counting numbers. When you divide numbers, it reports the nearest whole number. So 5/10 is 0 too. They do support “getting the remainder”, modulo “%”, but this too isn’t much use since the modulo here would be the same as dividend (e.g. the disk freespace it got).
First of all, if for example free-hdd-space=113070080 and total-hdd-space=134217728
this operation
($totalhdd - $freehdd / $totalhdd * 100)
is = to
(134217728 - 113070080 / 134217728 * 100)
and the result inside routeros is (134217728 - 0 * 100) = (134217728 - 0) = 134217728 the total hdd space
Because / and * take precedence over -
The correct operation to have “% freehdd space” from the proportion
$totalhdd : 100 = $freehdd : x
x = (100 * $freehdd) / $totalhdd
The division must be last operation, because RouterOS do not support floating values.
If you want decimals, multiply the numbers by 10, 100, etc. before the division, and use [:pick] for add the comma/dot (language specific)
{
/system resource
:local totalhdd [get total-hdd-space]
:local freehdd [get free-hdd-space]
:local percfree ((100 * $freehdd) / $totalhdd)
:put "Space: Total $totalhdd, Free $freehdd"
:put "$percfree% free disk space, $(100 - $percfree)% busy"
# 2 decimals = 2 significant zeros (for prevent results under 1,00% like _,_0%), number * 100 and :pick the last 2 digit
:local perdec "00$((100 * $freehdd * 100) / $totalhdd)"
:set perdec "$[:tonum [:pick $perdec 0 ([:len $perdec]-2)]],$[:pick $perdec ([:len $perdec]-2) [:len $perdec]]"
:put "$perdec% free disk space"
}
If you want “nice” formatted space(s) value on MiB (RouterOS style is MiB with 1 decimal):