Your question, your audience. Choose who sees your identity—and your question—with question security.

Hi EE,

I got help last year from EE in how to calcuate percentages.

A student can have one of the following grades in a course:

------------------------------------------------------------------

H - honors

HP - high pass

P - pass

Using a cross tab query, calculated (number of student) totals for each grade for a course

for ex:

course H HP P

=============================

MEDI 1107 26 41 102 <-- break down of how many students scored a particular grade

What the snippet below does is convert the total of students below to percentages.

26+41+102 = 169

26/169 * 100 = 15.38

41/169 * 100 = 24.26

102/169 * 100 = 60.35

Notice how the decimals portion is less than .50,

so the results of the calc are:

15%

24%

60%

that totals 99%

Is there any way to get the percentages to total 100% or is this to be expected in math?

tx for your thoughts and ideas, sandra

lngHCount = CLng(Nz(Me.txtHCount, 0))

lngHPCount = CLng(Nz(Me.txtHPcount, 0))

lngPCount = CLng(Nz(Me.txtPcount, 0))

lngTotal = lngHCount + lngHPCount + lngPCount

If lngTotal > 0 Then

lngHpct = (lngHCount / lngTotal) * 100

Else

lngHpct = 0

End If

If lngTotal > 0 Then

lngHPpct = (lngHPCount / lngTotal) * 100

Else

lngHPpct = 0

End If

If lngTotal > 0 Then

lngPpct = (lngPCount / lngTotal) * 100

Else

lngPpct = 0

End If

Me.txtHpct = lngHpct

Me.txtHPpct = lngHPpct

Me.txtPpct = lngPpct

I got help last year from EE in how to calcuate percentages.

A student can have one of the following grades in a course:

--------------------------

H - honors

HP - high pass

P - pass

Using a cross tab query, calculated (number of student) totals for each grade for a course

for ex:

course H HP P

==========================

MEDI 1107 26 41 102 <-- break down of how many students scored a particular grade

What the snippet below does is convert the total of students below to percentages.

26+41+102 = 169

26/169 * 100 = 15.38

41/169 * 100 = 24.26

102/169 * 100 = 60.35

Notice how the decimals portion is less than .50,

so the results of the calc are:

15%

24%

60%

that totals 99%

Is there any way to get the percentages to total 100% or is this to be expected in math?

tx for your thoughts and ideas, sandra

lngHCount = CLng(Nz(Me.txtHCount, 0))

lngHPCount = CLng(Nz(Me.txtHPcount, 0))

lngPCount = CLng(Nz(Me.txtPcount, 0))

lngTotal = lngHCount + lngHPCount + lngPCount

If lngTotal > 0 Then

lngHpct = (lngHCount / lngTotal) * 100

Else

lngHpct = 0

End If

If lngTotal > 0 Then

lngHPpct = (lngHPCount / lngTotal) * 100

Else

lngHPpct = 0

End If

If lngTotal > 0 Then

lngPpct = (lngPCount / lngTotal) * 100

Else

lngPpct = 0

End If

Me.txtHpct = lngHpct

Me.txtHPpct = lngHPpct

Me.txtPpct = lngPpct

What you could do is make the last percentage the difference between 100 and the sum of the other two percentages.

so the calcs are correct, even though it's odd

(other class total to 100%, btw)

i googled this:

http://msdn.microsoft.com/en-us/library/ck4c5842(VS.85).aspx

so the clng function is doing what the article above says, since decimal is less than .50,

does not round up the integer portion, just leaves as is....

pls confirm... tx, s

assign the integer value to the forms text box (besure to round the insteger value from the double, that way, you may get a round up for the decimals greater than 0.5) and retain the decimal in an additional variable, do that for all three values.

At the end of the above bit of code above, add all three "integer" values and if not equal to 100, then simply add one/subtract to the form's text box where its respective decimal portion was the greatest (or least, if subtracting)!

We are essentially advising Sandra the same thing, programmatically checking the total and making a corrective add/subtract, she will however need to change variable decalaration to double in order to check the decimal value.

Phaddock

Cluskitt,

Thx for writing....

It's very clever of all of you with the suggestion to pgmatically adjust the percentage when the

total is less than 100.

What i am understanding is that i just adjust the number with the highest decimal portion.

Is it possible to explain why the number with the highest decimal portion, and not the number with

the highest INTEGER portion...

tx all very much, s

The reason it is slightly more correct to adjust the highest decimal is because you are always making a smaller change to the numbers as a percentage of each number itself that gets changed.

Thx for alerting me to work with DOUBLE variables....

Question, pls:

====> HOW do you isolate the decimal part of the double result

to get .38 of 15.38

In the code window is how would modify the code, but got stuck on the above question

tx, s

```
So would create another 3 variables:
dim dblHCount as double
dim dblHPCount as double
dim dblPCount as double
then i would execute the exising logic like this:
lngHCount = CLng(Nz(Me.txtHCount, 0))
lngHPCount = CLng(Nz(Me.txtHPcount, 0))
lngPCount = CLng(Nz(Me.txtPcount, 0))
lngTotal = lngHCount + lngHPCount + lngPCount
If lngTotal > 0 Then
lngHpct = (lngHCount / lngTotal) * 100
Else
lngHpct = 0
End If
If lngTotal > 0 Then
lngHPpct = (lngHPCount / lngTotal) * 100
Else
lngHPpct = 0
End If
If lngTotal > 0 Then
lngPpct = (lngPCount / lngTotal) * 100
Else
lngPpct = 0
End If
==== add this logic
lngTotalPercent = lngHpct + lngHPpct + lngPpct
If lngTotalPercent < 100 then
dblHCount = (Nz(Me.txtHCount, 0))
dblHPCount = (Nz(Me.txtHPcount, 0))
dblPCount = (Nz(Me.txtPcount, 0))
====> HOW do you isolate the decimal part of the double result
to get .38 of 15.38
end if
```

Public Function DecimalPortion(Number As Double) As Double

Dim lPos As Long

lPos = InStr(1, Number, ".")

If lPos > 0 Then

DecimalPortion = Val(Mid(Number, lPos))

Else

DecimalPortion = 0

End If

End Function

the highest INTEGER portion..."

You have good idea - take maximum from decimal part divided to value.

the highest INTEGER portion

Because, statistically, that is the one closest to the next integer. Accounting for ratio, the highest integer would be the first, but with the current sample universe, the highest decimal is the closest to 1.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.