- Microsoft Flow Community
- Community News
- News & Announcements
- Get Help with Microsoft Flow
- General Flow Discussion
- Connecting To Data
- Building Flows
- Using Flows
- Flow Mobile App
- Translation Quality Feedback
- Share, Chat, Discuss
- Community Chat & Announcements
- Help with the Forum
- Flow Cookbook
- Off Topic Discussion
- Watch & Share Videos
- Gallery Forum
- Webinars and Video Gallery
- MBAS Gallery
- Give Feedback & Share Ideas
- Flow Ideas
- Report Issues
- I Found A Bug
- Find & Join Local User Groups
- Flow User Groups
- Read & Share Blogs
- Microsoft Flow Community Blog
- Community Blog Topic Suggestions

Turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

- Microsoft Flow Community
- Forums
- Get Help with Microsoft Flow
- Building Flows
- Re: Format decimal numbers

Topic Options

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page

Damo_R

Level: Powered On

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

11-21-2017
03:15 PM

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.

1 ACCEPTED SOLUTION

Accepted Solutions

efialttes

Super User

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

11-22-2017
03:25 AM

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!

9 REPLIES 9

efialttes

Super User

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

11-22-2017
03:25 AM

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!

Damo_R

Level: Powered On

Re: Format decimal numbers

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

11-22-2017
07:52 AM

@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

efialttes

Super User

Re: Format decimal numbers

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

11-22-2017
10:02 AM

You are welcome. Thanks for sharing!

Proud to be a Flownaut!

StevenWade

Level: Powered On

Rounding for specific scenarios

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

09-21-2018
08:24 AM

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))

henrim

Level: Powered On

Re: Format decimal numbers

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

10-18-2018
03:32 AM

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

- take result from division
- multiple by 10
- converting to int
- converting to float (else it became an integer result)
- dividing by 10

Thanks for the hint!

jan-dolejsi

Level: Powered On

Re: Format decimal numbers

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

11-05-2018
07:40 AM

It was not as simple, because int() and float() only accept string arguments. So you get a run-time error like this:

On top of that, the int() function only accepts string representations of integer numbers - it does not accept any floating point number. So I had to turn the number to string, select the part before the '.' and pass it to int(). Not sure if the '.' is subject to localization, which would obviously fail.

This is the expression I've put into a Compose action:

div(int(first(split(string(mul(123.456, 10.0)),'.'))), 10.0)The output was

123.4

aCTim

Level: Power Up

Re: Format decimal numbers

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

04-10-2019
08:17 AM

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)

Damo_R

Level: Powered On

Re: Format decimal numbers

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

04-10-2019
10:32 AM

Glad my efforts could help you

Highlighted
##

degvalentine

Level: Powered On

Re: Format decimal numbers

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

06-18-2019
05:48 PM

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.

Announcements

Join us for a FULL day of FREE Microsoft Flow Sessions from some of the best minds in the industry!

Top Kudoed Authors

User | Count |
---|---|

60 | |

35 | |

33 | |

29 | |

13 |