Here is a script for adding decimals in Mikrotik. If any desire for other decimal operations, let me know and I can post on the Wiki. This is tested on 3.x (shouldn’t be that hard to port over 2.x though)
# Adds decimal numbers
# Set decimals variable to any numbers (decimal or integer) separated by commas
# (ex. :local decimals ("2.43, 3.99, 395.6, 34, 56, 25, 2.3333, 11")
# Result: 530.3533
:local decimals ("2.43, 3.99, 395.6, 34, 56, 25, 2.3333, 11")
# Math Calculation here
:set decimals [:toarray $decimals]
:local result ""
:local resultint 0
:local resultdec 0
:if ([:len $decimals] > 1) do={
:for d from=0 to=([:len $decimals] - 1) do={
:local tmpdecimal [:tostr [:pick $decimals $d]]
:local curint 0
:local curdec 0
:local decimalpoint 0
:for c from=0 to=([:len $tmpdecimal] - 1) do={
:if ([:pick $tmpdecimal $c ($c + 1)] = ".") do={
:set curint [:pick $tmpdecimal 0 $c]
:set curdec [:pick $tmpdecimal ($c + 1) [:len $tmpdecimal]]
:if ([:len $resultdec] > [:len $curdec]) do={ :for z from=1 to=([:len $resultdec] - [:len $curdec]) do={:set curdec ($curdec . "0") } }
:if ([:len $curdec] > [:len $resultdec]) do={ :for z from=1 to=([:len $curdec] - [:len $resultdec]) do={:set resultdec ($resultdec . "0") } }
:local tmpdec ($resultdec + $curdec)
:if ([:len $tmpdec] > [:len $resultdec]) do={
:set resultint ($resultint + $curint + [:pick $tmpdec 0 ([:len $tmpdec] - [:len $resultdec])])
:set resultdec [:pick $tmpdec ([:len $tmpdec] - [:len $resultdec]) [:len $tmpdec]]
} else={
:set resultint ($resultint + $curint)
:set resultdec ($resultdec + $curdec)
}
:set decimalpoint 1
}
}
:if ($decimalpoint = 0) do={
:set resultint ($resultint + $tmpdecimal)
}
}
:set result ($resultint . "." . $resultdec)
}
# END Calculation here
:put $result