Results 1 to 4 of 4

Thread: Can't deal with long numbers !!!

  1. #1

    Thread Starter
    Evil Genius alex_read's Avatar
    Join Date
    May 2000
    Location
    Espoo, Finland
    Posts
    5,538

    Angry Can't deal with long numbers !!!

    Hi all, can someone tell me how I can get vb to work with a long number & run something like the below without getting an "out of memory" or "overflow" error message please?
    Code:
    Dim TempNo as currency
    TempNo  = (88 ^ 13)
    TempNo = TempNo mod 187
    msgbox TempNo
    Thanks

    Please rate this post if it was useful for you!
    Please try to search before creating a new post,
    Please format code using [ code ][ /code ], and
    Post sample code, error details & problem details

  2. #2
    Hyperactive Member
    Join Date
    May 2002
    Location
    Chicago
    Posts
    271
    I guess the Mod function won't handle such a large number, but this should:
    Code:
    Private Sub Command1_Click()
      Dim TempNo As Double
      TempNo = ModMe(88 ^ 13, 187)
      MsgBox TempNo
    End Sub
    
    Private Function ModMe(fdNumber As Double, fdDivisor As Double) As Double
      Dim fNum As Variant
      fNum = fdNumber / fdDivisor
      If InStr(1, fNum, ".") Then
        fNum = CDbl(Right(fNum, Len(fNum) - (InStr(fNum, ".") - 1)))
        fNum = fNum * fdDivisor
        ModMe = Int(fNum)
      Else
        ModMe = 0
      End If
    End Function
    Sometimes what you're looking for is exactly where you left it.

  3. #3

    Thread Starter
    Evil Genius alex_read's Avatar
    Join Date
    May 2000
    Location
    Espoo, Finland
    Posts
    5,538
    Great thanks, I've another question just for my benefit, why do you use variant here, do you always use this for laarge numbers?

    Is currency the largest number type, or can you declare a decimal number in vb?

    Thanks

    Please rate this post if it was useful for you!
    Please try to search before creating a new post,
    Please format code using [ code ][ /code ], and
    Post sample code, error details & problem details

  4. #4
    Hyperactive Member
    Join Date
    May 2002
    Location
    Chicago
    Posts
    271
    Actually, I found some errors with the function, this should fix most:
    Code:
    Private Function ModMe(fdNumber As Double, fdDivisor As Double) As Double
      Dim fNum As Variant
      If fdDivisor = 0 Then
        MsgBox "Divisor must be greater than 0"
        Exit Function
      End If
      If fdNumber < fdDivisor Then
        ModMe = fdNumber
        Exit Function
      End If
      fNum = fdNumber / fdDivisor
      If InStr(1, fNum, ".") Then
        fNum = CDbl(Right(fNum, Len(fNum) - (InStr(fNum, ".") - 1)))
        fNum = fNum * fdDivisor
        ModMe = Round(fNum, 0)
      Else
        ModMe = 0
      End If
    End Function
    I used the variant because it will handle strings and large numbers, which was needed for the instr part of the function.
    As far as data types that supprt decimals they are:

    From MSDN:
    Data type Storage size Range

    Byte 1 byte 0 to 255

    Boolean 2 bytes True or False

    Integer 2 bytes -32,768 to 32,767

    Long
    (long integer) 4 bytes -2,147,483,648 to 2,147,483,647

    Single
    (single-precision floating-point) 4 bytes -3.402823E38 to -1.401298E-45 for negative values; 1.401298E-45 to 3.402823E38 for positive values

    Double
    (double-precision floating-point) 8 bytes -1.79769313486232E308 to
    -4.94065645841247E-324 for negative values; 4.94065645841247E-324 to 1.79769313486232E308 for positive values

    Currency
    (scaled integer) 8 bytes -922,337,203,685,477.5808 to 922,337,203,685,477.5807

    Decimal 14 bytes +/-79,228,162,514,264,337,593,543,950,335 with no decimal point;
    +/-7.9228162514264337593543950335 with 28 places to the right of the decimal; smallest non-zero number is
    +/-0.0000000000000000000000000001

    Date 8 bytes January 1, 100 to December 31, 9999

    Object 4 bytes Any Object reference

    String
    (variable-length) 10 bytes + string length 0 to approximately 2 billion

    String
    (fixed-length) Length of string 1 to approximately 65,400

    Variant
    (with numbers) 16 bytes Any numeric value up to the range of a

    Double
    Variant
    (with characters) 22 bytes + string length Same range as for variable-length String

    User-defined
    (using Type) Number required by elements The range of each element is the same as the range of its data type.

    As you can see Single, Double, Decimal, Currency, and Variant all support decimals.
    Sometimes what you're looking for is exactly where you left it.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width