# Maths: Split

0 favourites
• 16 posts
• Hello, Dcrew here!

I wondered how I can split a string, so I can retrieve for example from this integer:

<font color=red>495</font><font color=green>825</font><font color=orange>542</font>

To get 1-3 # from the Int: <font color=red>495</font>

To get 4-6 # from the Int: <font color=green>825</font>

To get 7-9 # from the Int: <font color=orange>542</font>

I want to achieve this so I can display this integer in a string like so:

<font color=blue>\$ 495,825,542</font>

So it looks more readable, unless you have an alternative answer :)

• http://dl.dropbox.com/u/1013446/moneytext.capx

let me know if you need me to deconstruct it

• I was looking to use something like this for a similar problem... but I definitely need you to deconstruct it. <img src="smileys/smiley36.gif" border="0" align="middle" />

• 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

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

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)

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

• Dam i have headache..... <img src="smileys/smiley1.gif" border="0" align="middle" />

• <img src="smileys/smiley5.gif" border="0" align="middle" />

Um.

Maybe what I wanted to modify it for can use a simpler solution... <img src="smileys/smiley29.gif" border="0" align="middle" /> I just need to be able to go through a number and tell what each digit is individually. Is that as complicated to do?

• <img src="smileys/smiley5.gif" border="0" align="middle" />

Um.

Maybe what I wanted to modify it for can use a simpler solution... <img src="smileys/smiley29.gif" border="0" align="middle" /> I just need to be able to go through a number and tell what each digit is individually. Is that as complicated to do?

make sure it's a string and then just do mid(stringhere,index of character you want,1)

because:

mid(Text, Index, Length)

your Text is your number in string form, the Index is what digit you want and the Length is 1 since you just want that 1 digit

• ## Try Construct 3

Develop games in your browser. Powerful, performant & highly capable.

Construct 3 users don't see these ads
• Alrighty, I've basically got it working, except for one thing... What I'm doing is related to the score in my game. If the score is held in a string, is there any way to add to it? I was going to put it in a number variable and copy it over, but you're right, C2 can't have very large numbers. Which makes having the typical game style of very large scores... impossible. <img src="smileys/smiley6.gif" border="0" align="middle" /> Is there any way around this, or do I have to wait until they change that rounding thing?

• And what do you think of that ?

bigNumberDisplay.capx

Just store units, thousand, million, billion in different variables

Increment each one depending on the preceding one

and just use a bit of string manip to zero fill them when displayed.

right("000"&number,3) does the trick.

Are you appy?Yann2014-01-27 09:44:09

• Sadly I am in the office and can't create a capx by now .. so I will just type my thoughts =)

I am not even nearly as good as lucid, but I would try to solve the problem more like this:

Crating 9 sprites with 10 animation-frames (digits 0-9) and giving them variables, so if you score 2341 points, you will change the first 4 digits by 2, 3, 4 and 1 .. than a little calculation (if var > 10: set var-10 and add 1 to var2) and so on you will have a possibility to have a score as big as you want.

Or am I talking useless garbage? =/

• Definitely not useless garbage, Spade, that's a great idea -- and almost exactly what Yann put into his capx already. <img src="smileys/smiley36.gif" border="0" align="middle" /> Thanks a ton to both of you, seems like I won't have to wait for an official fix after all!

And yes, Yann, I'm very appy. <img src="smileys/smiley4.gif" border="0" align="middle" />

• Hehe, than I am appy too <img src="smileys/smiley36.gif" border="0" align="middle" />

• http://dl.dropbox.com/u/1013446/moneytext.capx

let me know if you need me to deconstruct it

Thanks, Nicely done! :D

Didn't expect another 11 replies lol :S

• Yeahhh... Sorry for hijacking your topic, dcrew. <img src="smileys/smiley9.gif" border="0" align="middle" />

• With regard to the number size issue. If you set a variable with an action you can use 15 digit numbers with no rounding.

• 16 posts