Solved

# String.Format as percentage based on decimal places

Posted on 2006-06-23
870 Views
I need to format some values in a gridview.  They all need to display as a percentage (0-100%), but only show the decimals if they exist:

i.e.
99       -->   99%
86.56  -->   86.56%
75.2    -->   75.2%

Is there a way to do this automatically using string.format?  If not, what's the easiest way to achieve what I need??
0
Question by:Rouchie
• 3
• 2

LVL 10

Accepted Solution

ibost earned 250 total points
ID: 16971515
Here's an example - maybe not the most elegant:

Dim i As Double
i = 98.1234

' Find location of the decimal place, if it exists
Dim decimalLocation As Integer = IIf(i.ToString.IndexOf(".") >= 0, i.ToString.IndexOf("."), -1)

' Create the format string for %... such as P0, P1, P4, etc
Dim precision As String = IIf(decimalLocation = -1, "P0", "P" & Len(i.ToString.Substring(decimalLocation + 1)))

' Divide i by 100 so 98.1234 becomes .981234 and then format as percentage making it 98.1234%
Dim s As String = (i / 100).ToString(precision)

Response.Write(s)

Output:
98.1234 %
0

LVL 10

Expert Comment

ID: 16971528
Actually you don't need the first IIF

This:
Dim decimalLocation As Integer = IIf(i.ToString.IndexOf(".") >= 0, i.ToString.IndexOf("."), -1)

Can just be:
Dim decimalLocation = i.ToString.IndexOf(".")
0

LVL 12

Expert Comment

ID: 16974052
does this work?

<asp:TemplateField >
<ItemTemplate>
<asp:Label ID="lb" runat="server" Text='<%# Eval("percent") %>'></asp:Label>%
</ItemTemplate>
</asp:TemplateField>
0

LVL 25

Author Comment

ID: 16982301
ibost,
I've implemented your suggestion but it removes all decimal placing.  This isn't what I needed - I only wanted rid of the decimals if it was n.00% or n.50% for example.  Currently the value 98.27 is formatted on-screen as 99%.   Can what you've done be amended at all?
Here's my code:

Dim i As Double = e.Row.DataItem("SkillLevel")
Dim decimalLocation As Integer = i.ToString.IndexOf(".")
Dim precision As String = IIf(decimalLocation = -1, "P0", "P" & Len(i.ToString.Substring(decimalLocation + 1)))
Dim l As Label = CType(e.Row.FindControl("lbl_skillLevel"), Label)
l.Text = (i / 100).ToString(precision)

deanvanrooyen,
I believe that would just add a % sign to the end of the label, correct??  Not all entries actually have scores, so I only need formatting where a number exists.
0

LVL 10

Expert Comment

ID: 16985285
what is i equal to right after you assign it e.Row.DataItem("SkillLevel")  ?

Try to Response.Write(i.tostring()) and see what it's value is.

The code I gave above works for me.  Assume the value is 99.234

the IndexOf the decimal is (decimalLocation) is 2.  It then sets a precision string equal to "P" + length of the substring beginning after the decimal.  In this case Len(i.ToString.SubString(decimalLocation + 1)) is equal to 3.  So precision should be P3.

Maybe try this?

Dim precision As String = IIf(decimalLocation = -1, "P0", "P" & Len(i.ToString.Substring(decimalLocation + 1)).ToString())
0

LVL 25

Author Comment

ID: 16985975
Sorry ibost, there was a slight error in my select statement which after tracing, showed that your first suggestion did work.

Thank you very much for your help.
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Lots of people ask this question on how to extend the “MembershipProvider” to make use of custom authentication like using existing database or make use of some other way of authentication. Many blogs show you how to extend the membership provider c…
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
In a recent question (https://www.experts-exchange.com/questions/28997919/Pagination-in-Adobe-Acrobat.html) here at Experts Exchange, a member asked how to add page numbers to a PDF file using Adobe Acrobat XI Pro. This short video Micro Tutorial sh…
Nobody understands Phishing better than an anti-spam company. That’s why we are providing Phishing Awareness Training to our customers. According to a report by Verizon, only 3% of targeted users report malicious emails to management. With compan…