Take a look at the builtin Range node to see if it suits your needs
I’m using it to keep a 0-100% slider in my dashboard for brightness, but map it to/from 0-255 that the underlying lamp needs.
The reason for the thought that you don't want linear is that your example shows the output changing by 4 as the input goes from 1 to 2, then by 5 as it goes from 2 to 3 and from 3 to 4, then by 85 for 4 to 20, which is 85/16 = 5.3 for each increment of the input. So the output is not a straight line.
yes - but we are all human - and we all talk about 0 - 100% - which is 101 values... when we mean 0 - 99.9999999 etc. and that is why I put in the "round to nearest integer" option in it, to help smooth out those bumps a bit - so you can map 0-100% to 0-255 on a bulb etc...
It isn't the number of unique integers that matters it is the number of intervals, which is 100. I disagree with the suggestion that we mean 0 - 99.99999. 99.99999 is less than 100. When you put 1 into a range node configured to map 0:1 to 1:100 you expect to get out exactly 100 if you put in exactly 1.
Similarly with the bulb example, 100% maps exactly to 255. The maths is (255-0)/(100-0) * input value, so 100 maps exactly to 255. No need for rounding, unless you don't want, for example, 1% to map the correct value which is 25.5.
There may be errors in the floating point calculations, but that is a different issue, best coped with by rounding when the value is displayed rather than when it is calculated.