ok
apparently c2 doesn't allow very large numbers, because it kept rounding when I'd use a number global instead of text and convert it to a string.
so first we set our global text variable to the number
the we do a loop from 1 to len(number)/3
len(number) is the length of the string,(called "number") as in, how many characters in the string divided by 3, because we want it in chunks of 3 for the comma
xxx,xxx,xxx,xxx,etc
then we have mid(number,len(number)-loopindex*3,3)&((loopindex>1)?",":"")&text.text
this we will break down piece by piece, first we have:
mid(Text, Index, Length)
this will get you a substring of Text, beginning at character Index, for Length characters, so if you did
mid("This string here", 3, 7)
you would get
"s strin"
you started at the index 3 in the string (0,1,2,3), and took 7 letters with you
so we have
mid(number,len(number)-loopindex*3,3)
our string is called "number" (to avoid confusion)
number = "495825542"
so we have mid("495825542",len("495825542")-loopindex*3,3)
len(number) returns the number of letters in the string
in this case 9, remember this parameter we're working on is the Index letter we want the substring to start on ( mid(Text, Index, Length) )
so len("495825542") has 9 letters, so in this case it equals 9
now we have
mid("495825542",9-loopindex*3,3)
loopindex*3 will start us on multiples of 3, but since we are minusing from 9 it will go from right to left:
loopindex=1
9-(1*3) = 6
so we start on index 6 of "495825542"
so we're on the last digit '5'
"495825(5)42"
and we are taking 3 characters "542"
next loopindex would be:
9-(2*3) = 3
so "495(8)25542"
and we take those 3 characters "825"
etc
we go from right to left, because if we have a number that's not divisible by 3, we don't want to have this
678,45
instead of
67,845
but the entire expression was:
mid(number,len(number)-loopindex*3,3)&((loopindex>1)?",":"")&text.text
so we have the mid() out of the way
then we have &((loopindex>1)?",":"")
this is a conditional operator:
condition?if true:if false
for instance if you did
5>4?"true":"false"
that expression would evaluate to "true" because the condition was true
if you did
5<4?"good":"bad"
if would evaluate to "bad" because 5 is not less than 4
in our expression:
((loopindex>1)?",":"")
we check if loopindex is equal to 1 and if it is not we add a "," to our string, and if it is we add "" (nothing) to our string
this is because once again we are working from right to left, and we don't want our numbers looking like this:
100,000, (with the extra comma at the end)
instead of just
100,000
one more look at our expression:
mid(number,len(number)-loopindex*3,3)&((loopindex>1)?",":"")&text.text
at the end we have &text.text
since we are doing the right side first we can't append to the end of the string
we have to add to the beginning, so we are getting our three numbers &text.text to add what we already have to the right side of our our current expression
after all that is over
we do:
"$"&text.text
to add the dollarsign to the left of our current text
make sense?
EDIT: i just tested this with nondivisible by 3 numberlengths and it did not work correctly. so I reuploaded and it has one extra step:
if (len(number)%3>0)
% operator gives the remainder of a division problem
like 9%3=0 because 9/3=3 with no remainder
8%3=2 because 8/3=2 r2 (a remainder of two)
so we want to know if the number of digits is divisible by 3
if it is, there is no remainder, we don't want an extra comma in there, so we skip this step, if it is greater than 0 there are some digits leftover, but less than three, actually there are exactly len(number)%3 digits left over so we :
set text to:
left(number,len(number)%3)&","&text.text
left is like mid but from the left side of the string
left(Text, Count)
so our Text is number
and the number of characters we want(Count) is len(number)%3 because that's how many characters are leftover after our clever little *3 loop.
then we add our "," and connect it to the rest of our number