removeprefix[foo] means almost the same thing as prefix[foo]: it matches items that actually have a prefix of "foo".
The difference is that removeprefix[] then also removes the "foo" prefix, leaving the remaining text behind.
For your stated use, where the !!projectsize contains numbers that are "zero-padded", you can write something like this:
<$text text={{{ [{!!projectsize}removeprefix[00]] ~[{!!projectsize}removeprefix[0]] ~[{!!projectsize}] }}} />
The leading ~ before each filter expression means "if the filter results so far are empty"
Thus, if the project size has leading "00", the first filter expression returns a result,
but if it has leading "0", the second filter expression returns a result, and
and if neither of those are matches, then it just gives the project size "as is".
However, there may be another way to address this.
Let's suppose you *don't* store any leading zeros in the projectsize field values.
Then, the problem is, as you originally noted, is that the sort[] filter does a *text* sort,
so that "1.3" and "140.15" both come before "2" and "3"
However, the nsort[] filter does a *numeric* sort, so that the results (using your example values)
would be ordered as: 1.3, 2, 3, and 140.15, as you intended.
One minor problem arises because your fields also include a suffix of " Gb", which makes the
"Non-numeric values are treated as having a higher value than any number"
Which automatically defeats the numeric sorting and reverts to text sort order.
To address this, you would first have to omit that text from the projectsize field of each
project tiddler. Then, to show a table of project titles and sizes, sorted numerically by projectsize,
you could write something like this (assuming you have tiddlers tagged with "project"):
<table>
<$list filter="[tag[project]nsort[projectsize]]">
<tr><td> {{!!title}}</td><td>{{!!projectsize}}</td></tr>
</$list>
</table>
Let me know how it goes...
enjoy,
-e