cancel
Showing results for
Did you mean:
New Member

## Rounding up to 15

Hi!

I have been searching the forum, but I can't get to an answer that works.

My flow receives a bunch of parameters, which are slightly modified by the flow, and then passed into API using HTTP request / POST.

• The API requires one of the parameters to be in 15 minute increments.
• The parameter that I start off with, is received in the flow as an integer bigger than zero (0).
• I'm trying to modify this integer, by rounding it upwards.

Input 1 to 15, should be 15

Input 16 to 30, should be 30

Input 31 to 45, should be 45

etc.

I've been at it for 2+ hours, trying to figure out a Compose expression that works, but I'm stuck.
If you have any thoughts, you will be my hero.

Cheers!

1 ACCEPTED SOLUTION

Accepted Solutions

It's not pretty, but this formula will get you what' you're looking for:

``````mul(
if(
equals(
int(
last(
split(
formatNumber(
div(
float(
item()
),
float(
15
)
),
'0.0'
),
'.'
)
)
),
0
),
int(
formatNumber(
div(
float(
item()
),
float(
15
)
),
'0'
)
),
int(
first(
split(
formatNumber(
div(
float(
item()
),
float(
15
)
),
'0.0'
),
'.'
)
)
),
1
)
),
15
)``````

The above is a brute-force way of implementing what's known as a 'Ceiling' function which rounds up to the nearest selected significance (in your case, 15).

You should be able to replace every instance of '15' with another whole-number significance (ie: 5) and it'd work just as well.

Also - although you didn't ask for it - just to show how much easier this is in Power Fx, here's the above functionality but implemented in Power Apps:

``````\$"{ThisItem.Value} => {With(
{
// The value you want to round //
number: ThisItem.Value,
// The multiple to which you want to round.
significance: 15
},
RoundUp(
number / significance,
0
) * significance
)}"``````

Which results in the following:

Cheers!

5 REPLIES 5
Super User

Hello, @RvdK , try to use this expression accordingly:

``````if(And(lessOrEquals(triggerBody()['number'],15),greater(triggerBody()['number'],0)),15,
if(And(lessOrEquals(triggerBody()['number'],30),greater(triggerBody()['number'],15)),30,
if(And(lessOrEquals(triggerBody()['number'],45),greater(triggerBody()['number'],30)),45,0)))``````

 If my reply helped you, please give a 👍 , & if it solved your issue, please 👍 & Accept it as the Solution to help other community members find it more. I am primarily available on weekdays from 6-10 PM CT and 5-10 PM CT on weekends. Visit my Blog: www.powerplatformplace.com

New Member

Hi!
Thanks for giving that a shot, really much appreciated!

That appears to do the trick up until 45, but I'm afraid that I don't have a cap on the value.
The biggest what I've seen would be under a value close to a thousand.

Yes, I could technically keep on expanding what you wrote there, but I would want to keep an open mind that this value can go anywhere.

I had figured something along the line of:

``````div(triggerBody()['number'],15) # this would become a number that needs to be rounded
float() # to show the two digits behind the dot / comma.
split() # to return these characters``````

This gets me quite far, but only works IF the number is not a rounded number.

New Member

I found my own answer, which works beautifully, without too many difficult calculations.
Some of you might not like this solution as it takes 5 steps instead of one compose, but..

Beauty of this one is that the input doesn't matter. This scales endlessly.

``````input
1: initialize var1 - int: div(input,15)
2: initialize var2 - int: mod(input,15)
3: initialize var3 - int:
4: compose: greaterorequals(step2,1)
5: condition: output(step4) is equal to true()
if no: set var3: mul(step1,15)``````

It's not pretty, but this formula will get you what' you're looking for:

``````mul(
if(
equals(
int(
last(
split(
formatNumber(
div(
float(
item()
),
float(
15
)
),
'0.0'
),
'.'
)
)
),
0
),
int(
formatNumber(
div(
float(
item()
),
float(
15
)
),
'0'
)
),
int(
first(
split(
formatNumber(
div(
float(
item()
),
float(
15
)
),
'0.0'
),
'.'
)
)
),
1
)
),
15
)``````

The above is a brute-force way of implementing what's known as a 'Ceiling' function which rounds up to the nearest selected significance (in your case, 15).

You should be able to replace every instance of '15' with another whole-number significance (ie: 5) and it'd work just as well.

Also - although you didn't ask for it - just to show how much easier this is in Power Fx, here's the above functionality but implemented in Power Apps:

``````\$"{ThisItem.Value} => {With(
{
// The value you want to round //
number: ThisItem.Value,
// The multiple to which you want to round.
significance: 15
},
RoundUp(
number / significance,
0
) * significance
)}"``````

Which results in the following:

Cheers!

New Member

Thanks, I will give this a shot.

Announcements

#### Power Apps News & Announcements

Keep up to date with current events and community announcements in the Power Apps community.

#### Power Apps Community Blog

Check out the latest Community Blog from the community!

Top Solution Authors
Top Kudoed Authors
Users online (3,298)