Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 186
  • Last Modified:

Adding Decimal To A Number

I have a number say 123456 and I want to add 2 decimals places to make it 1234.56. How do I do that??? Any ideas.(by the way-I wanna add more then 2 decimal places, please just give me the general idea)
0
the_chosen_one
Asked:
the_chosen_one
  • 6
  • 4
  • 2
  • +5
1 Solution
 
the_chosen_oneAuthor Commented:
And oh yeah, the user inputs the number in a text box and the program outputs it to the same text box
0
 
BarryTiceCommented:
dim lngStartNumber as long
dim sngEndNumber as Single

lngStartNumber = txtTextBox.Text
sngEndNumber = CSng(lngStartNumber) /100

txtTextBox.Text = sngEndNumber
0
 
BarryTiceCommented:
Or, try this

dim intLength as Integer
dim strMantissa as String
dim strDecimal as String

intLength = Len(txtTextBox.Text)
strMantissa = left$(txtTextBox.Text, intLength-2)
strDecimal = Right$(txtTextBox.Text, 2)
txtTextBox.Text = strMantissa & "." & strDecimal
0
Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
BarryTiceCommented:
You could, before either of those examples, use an InStr(txtTextBox.Text, ".") to see if there is already a decimal in place.
0
 
mark2150Commented:
Divide it by 10 ^ the number of places you want to add (2 places = 10^3, 3 places = 10^3, etc.) If the "number" is a string use VAL to convert it into a real number. If you're having trouble *displaying* the number use the FORMAT(myNumber, "###.##") command and simply change the number of #'s to the right of the decimal.

M
0
 
deightonCommented:
Here's how a code ninja would do it

Private Sub Command1_Click()
Text1 = add_dec(Text1, 2)
End Sub


Public Function add_dec(Number, nDecs As Long)

    add_dec = Format(Number / 10 ^ nDecs, "#." & String(nDecs, "0"))

End Function
0
 
mcriderCommented:
Deighton, there is a real problem with your code if the number already contains a decimal point...


Try this instead... It also allows you to return a leading zero if you want.


Public Function add_dec(ByVal Number, nDecs As Long, Optional UseLeadingZero As Boolean)
    Dim lString As String
    Dim iVal As Long
    lString = CStr(Number)
    iVal = InStr(1, lString, ".")
    If Not iVal = 0 Then Number = Number * 10 ^ (Len(lString) - iVal)
    add_dec = Format(Number / 10 ^ nDecs, IIf(UseLeadingZero, "0", "#") & "." & String(nDecs, "0"))
End Function



You would call it like this:

   Text1 = add_dec(Text1, 2,true)



Cheers!®©
0
 
woodsrrCommented:
format("234",".00")
0
 
mcriderCommented:
Woodsrr... format("123456",".00") will not get you 1234.56

Read the question again...
0
 
amebaCommented:
I didn't get 1234.56 from any of the above mentioned solutions.

my 0,02 DEM
0
 
mcriderCommented:
ameba, If your system is not set for US currency, you're not gonna get 1234.56


My solutions works on all of my US systems... ;-)
0
 
mcriderCommented:
By the way if you want format 00,00 use this:

Public Function add_dec(ByVal Number, nDecs As Long, Optional UseLeadingZero As Boolean)
    Dim lString As String
    Dim iVal As Long
    lString = CStr(Number)
    iVal = InStr(1, lString, ",")
    If Not iVal = 0 Then Number = Number * 10 ^ (Len(lString) - iVal)
    lString = Format(Number / 10 ^ nDecs, IIf(UseLeadingZero, "0", "#") & "." & String(nDecs, "0"))
    Mid$(lString, InStr(1, lString, "."), 1) = ","
    add_dec = lString
End Function



Cheers!®©
0
 
schrmarCommented:
Dim intDecimalPlaces As Integer
intDecimalPlaces = 2
If InStr(Text1.Text, ".") = 0 Then
   Text1.Text = Left(Text1.Text, Len(Text1.Text) - intDecimalPlaces) _
            & "." & Right(Text1.Text, intDecimalPlaces)
End If
0
 
the_chosen_oneAuthor Commented:
Thanx mcrider, it helped a lot. Now I've gotta figure out how to put 0's if they don't have enough numbers but want decimal places.
0
 
BarryTiceCommented:
You can do that through string parsing.

Say, at the end of all of the above, you end up with "1234.56" in your text box, but you want four decimal places.

intDecimals = 4      'Desired decimal places
intWhereDot = InStr(Text1.Text, ".")
Do While Len(Text1.Text) < (intWhereDot + intDecimals)
    Text1.Text = Text1.Text + "0"
Loop


Good luck!
0
 
mcriderCommented:
Thanks for the points! Glad I could help!...

Modifying the routine like this will allow you to specify leading zeros:

Public Function add_dec(ByVal Number, nDecs As Long, _
    Optional UseLeadingZero As Boolean, Optional nInts As Long)
    Dim lString As String
    Dim iVal As Long
    lString = CStr(Number)
    iVal = InStr(1, lString, ".")
    If Not iVal = 0 Then Number = Number * 10 ^ (Len(lString) - iVal)
    If nInts = 0 Then
        add_dec = Format(Number / 10 ^ nDecs, IIf(UseLeadingZero, "0", "#") & "." & String(nDecs, "0"))
    Else
        add_dec = Format(Number / 10 ^ nDecs, String(nInts, "0") & "." & String(nDecs, "0"))
    End If
End Function




Where:

    X = add_dec(100,3) 'RETURNS .100

    X = X = add_dec(100,3,,2) 'RETURNS 00.100


Cheers!®©
0
 
mcriderCommented:
That should have been:

Where:

    X = add_dec(100,3) 'RETURNS .100

    X = add_dec(100,3,,2) 'RETURNS 00.100

Cut and paste.... Geez! ;-)


Cheers!®©

0
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.

Join & Write a Comment

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 6
  • 4
  • 2
  • +5
Tackle projects and never again get stuck behind a technical roadblock.
Join Now