Rounding a Rounded Number

G

Guest

I'm working in Excel 2003 - VBA.

OldRate is a variable whose value comes from user input into a cell.
OldRate=Range("A1")

I am multiplying that variable by 1.075 and need to round up the result to
two decimal places.
NewRate=Application.Worksheetfunction.Round(OldRate * 1.075, 2)

Then I need to multiply that rounded result by .25 and round it up to two
decimal places.
AdjustedNewRate=Application.Worksheetfunction.Round(NewRate * .25, 2)

If $27.11 is the old rate, I would expect that $27.11 * 1.075 = $29.14
(rounded).
And $29.14 * .25 = $7.29 (rounded).

However, I am getting $7.28 in VBA.

How do I get VBA to give me $7.29?

TIA.
 
Z

Zack Barresse

I get 7.29 as my result from using your information. Try to use the
RoundUp() function instead perhaps??

HTH
 
D

Don Guillett

When I used your exact, I got 7.29 but when I did it your way with vba, I
got 7.28 but this one liner=7.29

MsgBox Round(Range("a1") * 1.075 * 0.25, 2)
 
N

Niek Otten

Hi Ken,

Dim your variables as Double, not Single

--
Kind regards,

Niek Otten
Microsoft MVP - Excel


| I'm working in Excel 2003 - VBA.
|
| OldRate is a variable whose value comes from user input into a cell.
| OldRate=Range("A1")
|
| I am multiplying that variable by 1.075 and need to round up the result to
| two decimal places.
| NewRate=Application.Worksheetfunction.Round(OldRate * 1.075, 2)
|
| Then I need to multiply that rounded result by .25 and round it up to two
| decimal places.
| AdjustedNewRate=Application.Worksheetfunction.Round(NewRate * .25, 2)
|
| If $27.11 is the old rate, I would expect that $27.11 * 1.075 = $29.14
| (rounded).
| And $29.14 * .25 = $7.29 (rounded).
|
| However, I am getting $7.28 in VBA.
|
| How do I get VBA to give me $7.29?
|
| TIA.
|
| --
| Ken Hudson
 
G

Guest

Hi Charles,
I don't want to round everything up the next hundreth. For example, I want
to round 7.144 to 7.14 and 7.145 to 7.15. Ceiling doesn't look like the way
to get there.

OldRate = 27.11
NewRate = Application.WorksheetFunction.Round(OldRate * 1.075, 2)
NewRate = Application.WorksheetFunction.Round(NewRate * 0.25, 2)

If I put the above code in a VBA module, I get 7.28 and I want 7.29.
 
G

Guest

Hi Zach,

If you put this code in a module, don't you get 7.28?

OldRate = 27.11
NewRate = Application.WorksheetFunction.Round(OldRate * 1.075, 2)
NewRate = Application.WorksheetFunction.Round(NewRate * 0.25, 2)
 
G

Gary Keramidas

this gives me 7.29
Option Explicit
Dim newrate As Double, oldrate As Double
Sub test()
oldrate = 27.11
newrate = _
Application.WorksheetFunction.Round(Application.WorksheetFunction.Round(oldrate
_
* 1.075, 2) * 0.25, 2)
Debug.Print newrate
End Sub
 
N

Niek Otten

Hi Ken,

The difference in precision between Single and Double is really quite large.
There is always a chance af a number being right on the edge (or really right off), but the chance of that happening is
substantially reduced if you use Doubles.


--
Kind regards,

Niek Otten
Microsoft MVP - Excel

| Nick,
|
| That was it - the variable needed to be double precision - although I don't
| know why.
|
| Thanks for the early Christmas present!
|
| Warmest regards....
|
| --
| Ken Hudson
|
|
| "Niek Otten" wrote:
|
| > Hi Ken,
| >
| > Dim your variables as Double, not Single
| >
| > --
| > Kind regards,
| >
| > Niek Otten
| > Microsoft MVP - Excel
| >
| >
| > | I'm working in Excel 2003 - VBA.
| > |
| > | OldRate is a variable whose value comes from user input into a cell.
| > | OldRate=Range("A1")
| > |
| > | I am multiplying that variable by 1.075 and need to round up the result to
| > | two decimal places.
| > | NewRate=Application.Worksheetfunction.Round(OldRate * 1.075, 2)
| > |
| > | Then I need to multiply that rounded result by .25 and round it up to two
| > | decimal places.
| > | AdjustedNewRate=Application.Worksheetfunction.Round(NewRate * .25, 2)
| > |
| > | If $27.11 is the old rate, I would expect that $27.11 * 1.075 = $29.14
| > | (rounded).
| > | And $29.14 * .25 = $7.29 (rounded).
| > |
| > | However, I am getting $7.28 in VBA.
| > |
| > | How do I get VBA to give me $7.29?
| > |
| > | TIA.
| > |
| > | --
| > | Ken Hudson
| >
| >
| >
 
G

Guest

Hi Niek,
(Sorry about the typo on your name in my last post.)
I guess I still don't understand the problem with using single precision. If
the result of my calculation was 7-8 decimal places, why doesn't single
precision round the answer correctly up to the nearest hundredth?
If you don't have the time to explain, no problem.
Cheers...
 
D

Don Guillett

You didn't like the one liner.

sub oneliner()
MsgBox Round(Range("a1") * 1.075 * 0.25, 2)
end sub
 
G

Guest

Hi Don,
I'm not sure the one-liner would give the result I needed.
The calculation is payroll related and I need to round the first reponse
before multiplying again.
If I get three decimals in the first calculation and multiply that by
another number without having rounded the first answer, wouldn't I get a
different answer than if I had rounded the first calculation?
For example, if I get 1.549 in the first calcuation and multiply by 1.1,
then: 1.549 * 1.1 = 1.7039 rounded to 1.70
If I round the 1.549 to 1.55, then: 1.55 * 1.1 = 1.705 rounded to 1.71
 
D

Don Guillett

MsgBox round(Round(Range("a1") * 1.075,2) * 0.25, 2)=7.28

MsgBox Application.Round(Application.Round(Range("e1") * 1.075, 2) * 0.25,
2)=7.29
 
G

Guest

Thanks Don.
Merry Christmas!

--
Ken Hudson


Don Guillett said:
MsgBox round(Round(Range("a1") * 1.075,2) * 0.25, 2)=7.28

MsgBox Application.Round(Application.Round(Range("e1") * 1.075, 2) * 0.25,
2)=7.29
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads


Top