Re: Making a decimal to fraction converter
- From: "Kasha" <RomulanPrince@xxxxxxxxxxxx>
- Date: Mon, 29 Sep 2008 20:42:18 -0400
Whoops, here's the real code
Dim denomtest As Integer
Dim numertest As Integer
Dim dota As Boolean
Dim dotb As Boolean
Dim time As Integer = 1
Dim num As Integer = 2
Dim numertesthold As Integer
Dim denomtesthold As Integer
Dim numertesta As Integer
Dim denomtesta As Integer
Dim frac As Double
Dim i As Integer
Private Sub convert()
time = 1
denomtesthold = denom.Text
numertesthold = numer.Text
top:
Do Until time = 100
For num = 2 To 51
If num = 51 Then GoTo chocolate
numertesta = numertesthold
denomtesta = denomtesthold
numertest = numertesta / num
denomtest = denomtesta / num
For i = 2 To Len(numertest)
If dota = True Or dota = False Then GoTo Here
If Mid(numertest, i, 1) = "." Then dota = True
If i = Len(numertest) Then dota = False
Next
Here:
For i = 2 To Len(denomtest)
If dotb = True Or dotb = False Then GoTo There
If Mid(denomtest, i, 1) = "." Then dotb = True
If i = Len(denomtest) Then dotb = False
Next
There:
If dota = False And dotb = False And denomtest <> 0 And numertest <> 0 And numertest / denomtest = frac Then
i = 2
time = time + 1
denomtesthold = denomtest
numertesthold = numertest
GoTo top
End If
Next
Loop
chocolate:
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Whole.Text = Int(Inch.Text)
numer.Text = (Inch.Text - whole.Text) * 10000000
denom.Text = 10000000
frac = numer.Text / denom.Text
Call convert()
Whole.Text = Int(Inch.Text)
Numer.Text = numertesthold
Denom.Text = denomtesthold
End Sub
End Class
"Kasha" <RomulanPrince@xxxxxxxxxxxx> wrote in message news:036DC4C7-5214-4642-9F75-633F3D482485@xxxxxxxxxxxxxxxx
I AM using three text boxes =] , one for the whole number, one for the numerator, and one for the denomenator.
Dim denomtest As Integer
Dim numertest As Integer
Dim dota As Boolean
Dim dotb As Boolean
Dim time As Integer = 1
Dim num As Integer = 2
Dim numertesthold As Integer
Dim denomtesthold As Integer
Dim numertesta As Integer
Dim denomtesta As Integer
Dim frac As Double
Dim i As Integer
Private Sub convert()
IF int(numer.Text) = 66 THEN
numertest = 1
denomtest = 6
Goto chocolate cake
Endif
time = 1
denomtesthold = denom.Text
numertesthold = numer.Text
top:
Do Until time = 100
For num = 2 To 51
If num = 51 Then GoTo chocolate
numertesta = numertesthold
denomtesta = denomtesthold
numertest = numertesta / num
denomtest = denomtesta / num
For i = 2 To Len(numertest)
If dota = True Or dota = False Then GoTo Here
If Mid(numertest, i, 1) = "." Then dota = True
If i = Len(numertest) Then dota = False
Next
Here:
For i = 2 To Len(denomtest)
If dotb = True Or dotb = False Then GoTo There
If Mid(denomtest, i, 1) = "." Then dotb = True
If i = Len(denomtest) Then dotb = False
Next
There:
If dota = False And dotb = False And denomtest <> 0 And numertest <> 0 And numertest / denomtest = frac Then
i = 2
time = time + 1
denomtesthold = denomtest
numertesthold = numertest
GoTo top
End If
Next
Loop
chocolate:
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Whole.Text = Int(Inch.Text)
numer.Text = (Inch.Text - whole.Text) * 10000000
denom.Text = 10000000
frac = numer.Text / denom.Text
Call convert()
Whole.Text = Int(Inch.Text)
Numer.Text = numertesthold
Denom.Text = denomtesthold
End Sub
End Class
That's how far I currently am. If I were to use your code, where would I place it?
"James Hahn" <jhahn@xxxxxxxxx> wrote in message news:OvoqMUcIJHA.4416@xxxxxxxxxxxxxxxxxxxxxxxFirstly, you can present the results from the three text boxes as a string:
text1.text & " " & text2.text & "/" & Text3.text
Secondly, any repeating decimal can be represented as the correct fraction using code, but you haven't indicated what your problem with this procedure is.
How is the user indicating that the decimal number is repeating indefinately, or is the problem that you can't detect when it's a repeating decimal? This could probably be solved with a regular expression.
Or is the problem that you don't know how to reduce a regular repeating number to a fraction? This is relatively easy, once you know the characteristics. For instance, if its a simple set of repeating digits, just use:
(Repeats is the number of digits that are repeated, textbox1 has the number to convert)
s = Split(TextBox1.Text, ".")
s(0) = s(0) & s(1).Substring(0, repeats)
numerator = Val(s(0) & "." & s(1))
power = 10 ^ repeats
numerator = numerator - value
denominator = power - 1
then simplify if possible. If it's some unique digitis followed by a repeating portion you need to allow for that in the adjustment of the value, and then adjust the numerator and denominator by powers of 10 until you have eliminated the fractional part of the numerator.
"Kasha" <RomulanPrince@xxxxxxxxxxxx> wrote in message news:8350ED0C-6972-42CB-81BE-38C9509B1A6F@xxxxxxxxxxxxxxxxThe goal of the program is to convert decimals to fractions with only the input of a decimal number, and thus far, I've only been able to simplify nonrepeating decimal numbers. If I were to have the user specify the finest graduation, I'd need a drastically different code, and I'd be going beyond the goal of the program =\
Is my goal hopeless without specifying the finest graduation then?
-Jason
"Tom Dacon" <tdacon@xxxxxxxxxxxxxxxx> wrote in message news:ui4sIPNIJHA.3824@xxxxxxxxxxxxxxxxxxxxxxxJason, if you can have your users specify the finest graduation to output (say, 64ths, 8ths, quarters, etc.), or if you assume a certain finest graduation, you can convert a repeating fraction and then round to the finest graduation that the number converts to, and then reduce it if possible.
So for instance, your 1/3 is 0.33333... If your finest graduation is 128ths, multiply the 0.33333... by 128, getting 42.66666... and round to 43, giving youi 43 / 128ths.
Similarly, 1/9 is 0.11111... For 128ths, multiply 0.11111... by 128, getting 14.22222... Round to 14/128ths and reduce to 7/64ths.
Tom Dacon
Dacon Software Consulting
"Jason" <RomulanPrince@xxxxxxxxxxxx> wrote in message news:204A45ED-4C6D-43E6-AD43-BBCCA0F71073@xxxxxxxxxxxxxxxxI'm making a program that will convert decimal inputs (in this case, in inches) and output a fractional answer. At the moment, I'm only able to output the fractional answer in three parts: A whole number text box, a numerator text box, and a denominator text box. I realize that this is probably the closest I'll get to having fractions displayed in VB, so that's no big deal. I'm able to simplify most numbers with some code I've written, but I'm unable to simplify anything that repeats infinitely (i.e.. 1/3). Is there any way to be able to simplify this?
I can give you the code I've already written if that would help.
Thanks!
.
- References:
- Making a decimal to fraction converter
- From: Jason
- Re: Making a decimal to fraction converter
- From: Tom Dacon
- Re: Making a decimal to fraction converter
- From: Kasha
- Re: Making a decimal to fraction converter
- From: James Hahn
- Re: Making a decimal to fraction converter
- From: Kasha
- Making a decimal to fraction converter
- Prev by Date: Re: How can this MicroSoft Example to get short file names be made to
- Next by Date: Re: How can this MicroSoft Example to get short file names be made to
- Previous by thread: Re: Making a decimal to fraction converter
- Next by thread: Re: Making a decimal to fraction converter
- Index(es):
Loading