Results 1 to 1 of 1

Thread: Determining if a Decimal has Value to specified significant digits.

  1. #1

    Thread Starter
    PowerPoster cafeenman's Avatar
    Join Date
    Mar 2002
    Location
    Florida
    Posts
    2,819

    Determining if a Decimal has Value to specified significant digits.

    If you have use for a function that returns the actual decimal portion then you could split this up by removing the part that finds the decimal value itself and put it in a different function. Probably a better programming practice regardless.

    I didn't do that here.

    My use-case is displaying something per second.

    After a while it becomes something / 1 and pretty much stays that way.

    "Thing" and Seconds are always whole numbers.

    So if it's 3 things every 5 seconds then I want it to display 0.60.

    But if it's 3 things every second I want it to just display 3.

    So what I'm trying to do is display a decimal value only if necessary and otherwise display a whole number.

    The way it works is that you tell it to check if a decimal has value and the number of places you care about.

    The code should be self-explanatory.

    Code:
    Public Function HasDecimalValue(ByRef Value As Double, ByRef DecimalPlaces As Long) As Boolean
    Dim nValue As Long
    Dim rDecimal As Double
    
    ' Determines if Decimal = 0 to number of decimal places.
    
    ' HasDecimalValue 4.04, 2 returns True.
    ' HasDecimalValue 4.04, 1 returns False.
    ' HasDecimalValue 3.009, 3 Returns True.
    ' HasDecimalValue 3.009, 2 Returns False.
    
    nValue = Int(Value)
    
    If nValue = Value Then Exit Function
    
    rDecimal = (Value - nValue) * (10 ^ DecimalPlaces) ' You would move rDecimal = (Value - nValue) to a separate function that returns the entire decimal portion of a number if you want that.
    
    nValue = Int(rDecimal)
    
    If nValue = 0 Then Exit Function
    
    HasDecimalValue = True
    
    End Function
    
    ' This next part is air code.
    
    Function FormatNumber(ByRef Number As Double, ByRef DecimalPlaces As Long) As String
    
    If HasDecimalValue(Number, DecimalPlaces) then
    
      FormatNumber =Format$(Number,"0." & String$(DecimalPlaces, "0"))
    
    Else
    
      FormatNumber = Cstr$(Int(Number)) 
    
    End if
    Last edited by cafeenman; Dec 25th, 2024 at 03:29 PM.

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