Round / Format a decimal value

  • It doesn't but I just heard that the value cant be a whole number.

    So I think round((AResourceValue / 1000000) * 1000)) /1000

    should work.

    Well, yes..

    The expression was made to limit the amount of decimal numbers on a number with decimals..

    If you don't have any decimals, ofcourse it won't work..

  • Works great unless you want to display zeroes on the end of your decimal placing, for example making a field that enters a price (dollar value) for something.

    Any idea how to easily force a zero onto the end of decimal?

    ~Sol

  • SoldjahBoy

    You can do that with the zeropad() expression.

    int(number)&"."&zeropad(int(number*100)%100, 2)

    That only works for positive numbers though. For negative numbers make it positive first, then add a minus sign after. Using a function would be useful in this case.

    Or if you add the browser object to your project you can do it with js:

    Browser.ExecJS(number&".toFixed(2)")

  • R0J0hound

    Thanks for that mate, I'll give it a try and see how it works. What I'm trying to do is have a text input box where it sets the decimal place on the fly, as the user inputs a number.

    For example, the user types in 2350 and the box will display 23.50, with two decimal places always being shown during the input; IE with the example number provided, as the user enters the first digit "2" the box will show 0.02... then when the "3" is added it will display 0.23, then the "5" will make it 2.35, and lastly the zero should show 23.50

    So far simply using the example provided by Ashley works well, until a "0" is present at the end of the input (because the 0 gets ignored unless followed by another number).

    I'll play around with your example and see if I can get it to play nicely. Cheers!

    *EDIT*

    Ended up as this for a working result:

    Seems pretty solid!

    ~Sol

  • float

    float f = 10.123456F;

    float fc = (float)Math.Round(f * 100f) / 100f;

    Double

    Double d = 100.123456;

    Double dc = Math.Round((Double)d, 2);

    Decimal

    decimal d = 100.123456M;

    decimal dc = Math.Round(d, 2);

    Source : Jeery

  • float

    float f = 10.123456F;

    float fc = (float)Math.Round(f * 100f) / 100f;

    Double

    Double d = 100.123456;

    Double dc = Math.Round((Double)d, 2);

    Decimal

    decimal d = 100.123456M;

    decimal dc = Math.Round(d, 2);

    Source : Jeery

    Any reason for this reaction in this thread?

    These aren't Construct2 expressions, so I'm just curious..

  • How do I add this round(N * 100) / 100) to a button in Construct 2?

    Make a global var N?

    Or does it get attached to result?

    Nevermind I got it.

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • Great thread, helped a lot!

  • Hi guys its possible to make counter like this 00:00 ?

  • Well I thought I'd share a timer with 1 decimal place I made. I found that Construct 2 rounded off a number like 2.0 to just 2, which made the text jumpy. So instead of doing

    ""&floor(VAR/6)/10

    I resorted to doing this:

    ""&floor(VAR/60)&"."&((floor(VAR/6))/10-floor((floor(VAR/6))/10))*10

    The idea is that it finds two different numbers, one for the number of seconds remaining, and one for the number of 10ths of a second remaining in that second, then you insert a decimal point "." in the middle of the two numbers.

    So lets say you wanted to round a number of seconds into a format like 3.5 hours. First, you need to find out how many full hours are left. You can calculate that by rounding down the 'number of seconds divided by 3600', that is, floor(no_of_seconds/3600). You then need to find out how many 10ths of an hour are left in that hour, which is quite a bit more complicated. You need to find out the remainder of seconds when divided by 3600 - no_of_seconds-(floor(no_of_seconds/3600))*3600. Then you need to find out how many 10ths of an hour (360 seconds) that many seconds equate to - floor((no_of_seconds-(floor(no_of_seconds/3600))*3600)/360). And finally to finish it off, you string it together to get:

    ""&floor(no_of_seconds/3600)&"."&floor((no_of_seconds-(floor(no_of_seconds/3600))*3600)/360)

  • I have a Number type variable that gets set to a Text type variable and displayed.

    It is turning an INT into a STR.

    I am rounding the INT variable to show two decimal places before setting it to the STR.

    I am using 'round(N * 100) / 100' as mentioned.

    For the most part it is doing this, but occasionally I will get 1 or 0 decimal places.

    3.49, 4.5, 5.23, 5.75, 6, 6.23

    I believe it is happening when a number is an exact 4.5 or 6 and not +/- a small bit.

    Anybody know how to prevent this?

    ****************************************

    I found the answer.

    https://www.scirra.com/tutorials/678/in ... -functions

    You basically have to do what was mentioned above.

    You have to do Math for both sides of the decimal point.

    zeropad(int(time/60% 60), 2) & ":" & zeropad(int(time%60), 2)

    This one is for time, I didn't test it, I just copied it from above link, it did point me towards zeropad though.

    This will always result in 00:00 format.

    str(floor(TestVariable/1)) & "." & str(zeropad(round(TestVariable * 100)%100,2))

    I did test this one. It is for a number value that isn't time.

    This will always result in 0:00 format.

    If you need 00:00 or another combination then zeropad should be used.

    Round(), Zeropad(,) and Modulo

    https://www.scirra.com/manual/126/system-expressions

    https://www.scirra.com/manual/78/expressions

Jump to:
Active Users
There are 1 visitors browsing this topic (0 users and 1 guests)