Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 7
Default Returning just the integer portion of a number

How do I return the integer portion of a number? for example 508.5 or
508.49 or 508.51 all should return 508

I have tried this::

Sub test()
Dim anyNum As Double
Dim I As Integer
anyNum = 508.51
I = anyNum \ 1
MsgBox I
End Sub


However, VB is first rounding anyNum in I = anyNum \ 1 and then doing the
\ 1 operation. Thus 508.51 returns 509 instead of the desired value of 508.

Thanks in advance!



  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 1,311
Default Returning just the integer portion of a number

Try this:

Sub test()
Dim anyNum As Double
Dim I As Integer
anyNum = 508.51
I = Int(anyNum)
MsgBox I
End Sub

HTH,
Paul

"George Burdell" wrote in message
. ..
How do I return the integer portion of a number? for example 508.5 or
508.49 or 508.51 all should return 508

I have tried this::

Sub test()
Dim anyNum As Double
Dim I As Integer
anyNum = 508.51
I = anyNum \ 1
MsgBox I
End Sub


However, VB is first rounding anyNum in I = anyNum \ 1 and then doing
the \ 1 operation. Thus 508.51 returns 509 instead of the desired value of
508.

Thanks in advance!





  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 7
Default Returning just the integer portion of a number

Your example works, but when I put it into my macro, which performs math on
the anyNum value, it doesn't always work :((

for example:

Sub test()
Dim anyNum As Double
Dim I As Integer
anyNum = 48.4
anyNum = anyNum / 0.1
I = Int(anyNum)
MsgBox I
End Sub

returns 483 instead of 484. If I do a watch on "anyNum / 0.1" and anyNum
both are 484 right before I is assigned. But I is assigned the value 483
by using Int(). I think what is happening is that anyNum /0.1 is actually
483.99999999999, thus the value of 483 as the answer. The only solution
I've come up with is to join anyNum with a text string ("x"), find the
decimal in the text string, extract the number between the "x" and the
decimal, and assign it to I.

Sub test2()
Dim anyNum As Double
Dim I As Integer
Dim N As Integer
Dim nDiv As Double
Dim S As String
anyNum = 48.4
nDiv = 0.1 'but can vary (0.01, 0.001, etc)
anyNum = anyNum / nDiv
S = "x" & anyNum & "." ' adding "." in case no "." in anynum
N = InStr(S, ".")
I = Mid(S, 2, N - 2)
MsgBox I
End Sub

That's what I call a super kludge! Anyone have any better ideas?


"PCLIVE" wrote in message
...
Try this:

Sub test()
Dim anyNum As Double
Dim I As Integer
anyNum = 508.51
I = Int(anyNum)
MsgBox I
End Sub

HTH,
Paul

"George Burdell" wrote in message
. ..
How do I return the integer portion of a number? for example 508.5 or
508.49 or 508.51 all should return 508

I have tried this::

Sub test()
Dim anyNum As Double
Dim I As Integer
anyNum = 508.51
I = anyNum \ 1
MsgBox I
End Sub


However, VB is first rounding anyNum in I = anyNum \ 1 and then doing
the \ 1 operation. Thus 508.51 returns 509 instead of the desired value
of 508.

Thanks in advance!







  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 1,311
Default Returning just the integer portion of a number

How about this:

Sub test2()
Dim anyNum As Double
Dim I As Integer
anyNum = CLng(48.4 / 0.1)
I = anyNum
MsgBox I
End Sub




"George Burdell" wrote in message
. ..
Your example works, but when I put it into my macro, which performs math
on the anyNum value, it doesn't always work :((

for example:

Sub test()
Dim anyNum As Double
Dim I As Integer
anyNum = 48.4
anyNum = anyNum / 0.1
I = Int(anyNum)
MsgBox I
End Sub

returns 483 instead of 484. If I do a watch on "anyNum / 0.1" and anyNum
both are 484 right before I is assigned. But I is assigned the value 483
by using Int(). I think what is happening is that anyNum /0.1 is actually
483.99999999999, thus the value of 483 as the answer. The only solution
I've come up with is to join anyNum with a text string ("x"), find the
decimal in the text string, extract the number between the "x" and the
decimal, and assign it to I.

Sub test2()
Dim anyNum As Double
Dim I As Integer
Dim N As Integer
Dim nDiv As Double
Dim S As String
anyNum = 48.4
nDiv = 0.1 'but can vary (0.01, 0.001, etc)
anyNum = anyNum / nDiv
S = "x" & anyNum & "." ' adding "." in case no "." in anynum
N = InStr(S, ".")
I = Mid(S, 2, N - 2)
MsgBox I
End Sub

That's what I call a super kludge! Anyone have any better ideas?


"PCLIVE" wrote in message
...
Try this:

Sub test()
Dim anyNum As Double
Dim I As Integer
anyNum = 508.51
I = Int(anyNum)
MsgBox I
End Sub

HTH,
Paul

"George Burdell" wrote in message
. ..
How do I return the integer portion of a number? for example 508.5 or
508.49 or 508.51 all should return 508

I have tried this::

Sub test()
Dim anyNum As Double
Dim I As Integer
anyNum = 508.51
I = anyNum \ 1
MsgBox I
End Sub


However, VB is first rounding anyNum in I = anyNum \ 1 and then doing
the \ 1 operation. Thus 508.51 returns 509 instead of the desired value
of 508.

Thanks in advance!









  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,651
Default Returning just the integer portion of a number

On Thu, 7 Jun 2007 10:42:16 -0400, "George Burdell"
wrote:

I think what is happening is that anyNum /0.1 is actually
483.99999999999, thus the value of 483 as the answer. The only solution
I've come up with is to join anyNum with a text string ("x"), find the
decimal in the text string, extract the number between the "x" and the
decimal, and assign it to I.


You're correct, although the number is a bit less that 483.999999999999999.

One thought:

Sub test()
Dim anyNum
Dim I As Integer
anyNum = 48.4
anyNum = CDec(anyNum / 0.1)
I = Int(anyNum)
Debug.Print I
End Sub
--ron


  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 14
Default Returning just the integer portion of a number

On 7 Jun, 14:39, "George Burdell" wrote:
How do I return the integer portion of a number? for example 508.5 or
508.49 or 508.51 all should return 508


Sub test()
Dim anyNum As Double
Dim I As Integer
anyNum = 508.51
I = int(anyNum)
MsgBox I
End Sub

Simpler, no?

--
juux

Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Buttons in lower portion of workbook appear in upper portion ToferKing Excel Programming 1 April 22nd 06 06:46 PM
funtion to determine the fraction portion of a number? Bertus Excel Worksheet Functions 1 April 21st 06 09:28 AM
Returning an integer from a Function WannaBeExceller Excel Programming 4 January 18th 06 10:43 PM
how do i operate on the decimal portion of a number maintchief New Users to Excel 3 October 24th 05 06:43 PM
Display ONLY fraction portion of number John F Excel Discussion (Misc queries) 4 January 6th 05 03:49 PM


All times are GMT +1. The time now is 06:06 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright ©2004-2025 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"