I am trying to format the data of a calculated field within the flow to send in an email to show 2 decimal places. has anyone acheived this?
I have tried both Text and Round and several iterations of these functions and they come back as invalid templates.
Can anyone shine any light on this?
the value from the column is 1.50000000000 i only want to see 1.5
Solved! Go to Solution.
As far as I know, math functions currently supported in Microsoft FLow as "expressions" are the ones defined here:
https://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-workflow-definition-language
I guess you can multiply by 100, convert into integer, get back to float and divide into 100; but I haven't tested myself; so unsure if both float() and int() accepts non-string parameters
Hope this helps
Proud to be a Flownaut!
As far as I know, math functions currently supported in Microsoft FLow as "expressions" are the ones defined here:
https://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-workflow-definition-language
I guess you can multiply by 100, convert into integer, get back to float and divide into 100; but I haven't tested myself; so unsure if both float() and int() accepts non-string parameters
Hope this helps
Proud to be a Flownaut!
@efialttes thank you so much for your repsponse and the link you provided. With a little reading and some trial and error i have come up with the following:
if(or(greater(body('Create_item')?['Days_x0020_Total'], string (10)),equals(body('Create_item')?['Days_x0020_Total'],string(10))),take(body('Create_item')?['Days_x0020_Total'],4),take(body('Create_item')?['Days_x0020_Total'],3))
This basically looks at the value in the total days field and determines if it is greater or equal to 10, if yes then it will produce 4 place and if no it will produce 3 places.
works a treat
You are welcome. Thanks for sharing!
Proud to be a Flownaut!
There's still no generalized rounding solution in Flow, which means building solutions specific to your data. Here's an approach I took when I needed to round from three decimals (#.###) to two (#.##) for display purposes. Fortunately, I knew I'd always be getting data in a #.### format, but you could pretty easily extend this to find the decimal place if the number of places to the left of the decimal was unknown.
if(contains('56789', substring(string(triggerBody()['number']),4,1)),substring(string(add(triggerBody()['number'],0.01)),0,4),substring(string(triggerBody()['number']),0,4))
I just used your suggestion to round the result of my division formula:
Original expression:
div(variables('Sum'),5)
Which returned the full result, i.e 1.6666666 or similar.
I formatted it to 1 decimal using this expression:
div(float(int(mul(div(variables('Sum'),5),10))),10)
that is
Thanks for the hint!
It was not as simple, because int() and float() only accept string arguments. So you get a run-time error like this:
div(int(first(split(string(mul(123.456, 10.0)),'.'))), 10.0)The output was
123.4
Thanks to Damo_R I was able to round numbers for our case, with two numbers behind. A little bit ugly, but it works.
Initializing 2 variables.
variable var as string
first(split(string(mul(123.454, 1000.0)),'.'))
(you can put your number or varible where 123.454 is)
variable varTemp as Integer
int(variables('var'))
than we go on with a condition
if
int(last(variables('var')))
equal or even to 5
set var to
sub(add(int(variables('varTemp')),10),int(last(string(variables('varTemp')))))
else
set var to
sub(int(variables('varTemp')),int(last(string(variables('varTemp')))))
finally transform it to a float (int would slice the numer)
div(float(int(div(int(variables('var')),10))),100)
Here's a similar solution, but no temp variables are needed.
Uses variables('myFloat') to represent the number you want to round.
div(
add(
mul(variables('myFloat'), 1000),
sub(
if(
greaterOrEquals(
mod(mul(variables('myFloat'), 1000), 10),
5
),
10,
0
),
mod(mul(variables('myFloat'), 1000), 10)
)
),
1000
)
Or, all in one line:
div(add(mul(variables('myFloat'),1000),sub(if(greaterOrEquals(mod(mul(variables('myFloat'),1000),10),5),10,0),mod(mul(variables('myFloat'),1000),10))),1000)
The float is multilpiled by 1000 before doing modulo to avoid tiny-fraction math errors (e.g. returning 0.00499999... instead of 0.005).
Using add, sub, mul, div, and mod to round a float... a reasonable workaround... XD
If you're looking for an expression to format for currency with a thousands separator, see my expression in another post.
This can be done with the following
substring(string(triggerOutputs()?['body/tileValue'])),0,3)
Don't forget the decimal '.' counts as a character because this is a string not an actual intager. It is not actual rounding, but it accomplished what I needed for my email to look cleaner.
@StevenWade , thanks so much for sharing this. I want to limit my decimals to two points, can you please help me with what modification should I make in the expression you shared please, thanks in advance.
@jan-dolejsi thanks for sharing. I have a requirement to limit decimal points to two, so as an example: 40.325 should result into 40.33. Can you please help me with the revised formula, thanks in advance.
@degvalentine thanks for sharing, I used your expression for limiting decimals to two places and it seems to work well. Noticing a small issue, if the values are 2.2, 4.3 etc then the expression returns 2.2, 4.3 only but instead i want it to show 2.20, 4.30, is it possible? Please help.
Hi @dmistry,
Actually, my hideous workaround is no longer needed. They added the "formatNumber" function. Please use that instead. Here's the syntax for common currency formatting (without currency symbol):
formatNumber(variables('myFloat), 'N', 'en-US')
Here's the doc for all available number formatting options: https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-numeric-format-strings
Thanks @degvalentine a lot for sharing this, I was stuck with this issue since 3 days and this helped me out, keep up the good work, cheers!!
p.s: it works great and gives me two decimal points.
@rafaelbenicio you should use the "formatNumber()" expression or the "Format Number" action.
Here are links to the standard formats and custom formats.
formatNumber(1.995,'N2') // returns "2.00"
Dive into the Power Platform stack with hands-on sessions and labs, virtually delivered to you by experts and community leaders.
Watch Nick Doelman's session from the 2020 Power Platform Community Conference on demand!
User | Count |
---|---|
45 | |
42 | |
37 | |
36 | |
23 |
User | Count |
---|---|
42 | |
39 | |
30 | |
28 | |
27 |