ASP Classic - VBScript Math 7 1/8 compare 7 2/8

Hello All;

As the title suggest, I need to compare some numbers.
OK, If VBScript does not work, then JavaScript will be welcomed in this project.

OK.
I need to compare numbers, and show the difference between the 2 sets.
However, they are using the "Date Entered" as well.
So, lets say that the following exist.

NewDate = 1/7/2013
OldDate =   1/2/2013

OldDate    7 2/8
NewDate    7 4/8
Resulting in:  Gained: 2/8
Between the 2 figures, there is a 2/8 difference.

Now, if it is like this

OldDate    7 2/8
NewDate    7 1/8
Resulting in:  Loss: 1/8

So basically, I need it to be like so.

If NewDate<OldDate then
Loss 1/8 (Have to show the amount that is lost)
elseif NewDate>OldDate then
Gained 2/8 (Once again, have to show the amount that is gained.
End if

I hope that this all makes some since to someone.
I really need this mathematical calculations to work in my project, to really add that user friendly feeling to this site.

Thank you
Carrzkiss
LVL 31
Who is Participating?

x

Developer & EE ModeratorCommented:

``````<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
Dim f
Set f=Server.CreateObject("Scripting.Dictionary")

%>
<%
function MakeFraction(n)
theInt=int(n)
theFrac=n-theInt
if theInt<>0 then
MakeFraction= theInt&" "&f.item(theFrac)
else
if theFrac<>0 then
MakeFraction= f.item(theFrac)
else
MakeFraction="0" 'everythign is zero
end if
end if
end function
%>
<!DOCTYPE HTML>
<html>
<meta charset="UTF-8">
<title>Untitled Document</title>

<body>
<%
OldNumber=5.125
OldNumberFrac=MakeFraction(OldNumber)
NewNumber=request.form("measures")
NewNumberFrac=MakeFraction(NewNumber)
Difference=cdbl(OldNumber)-cdbl(NewNumber)
DifferenceFrac=MakeFraction(Difference)

%>

<h2> The old number is <%=OldNumberFrac%>.  The number you chose is
<%

if request.form("measures")<>"" then

response.write NewNumberFrac&".  The difference is "&DifferenceFrac
else
response.write "No Number"
end if
%>
</h2>
<form method="post">
<select name="measures">
<%
MinNum=1
MaxNum=50

for theNums=MinNum to MaxNum
for each x in f
'response.write theNums &" "& f.item(x)
response.write "<option value="""&theNums+x&""">"&theNums &" "& f.item(x)&"</option>"
next

next
%>

</select>
<input name="Submit" type="submit" value="Submit">
</form>
</body>
</html>
``````
0

Developer & EE ModeratorCommented:
I never thought of dates being in eights.

In vbs you would simply use
``````<%
NewDate = "1/7/2013"
OldDate =   "1/2/2013"

daysdiff=datediff("d",OldDate,NewDate)
if daysdiff<0 then
message=You lost "&daysdiff & "days"
end if
if daysdiff=0 then
message="You did not gain or or loose any days"
end if
if daysdiff>0 then
message="You gained "&&daysdiff& "days"
end if
response.write message
%>
``````

I think I am missing something in your question. I don't understand the fractions with dates?
0

Commented:
Does "7 2/8" represent "7.25" (the fields happen to be named "OldDate" and "NewDate" but are not necessarily dates) or are you using a date format I am unfamiliar with?

I'm lost on how "January 7, 2013" becomes "7.5"  (7 4/8), etc.
0

Developer & EE ModeratorCommented:
If you need to convert decimal to fraction using vbs or using js
0

Developer & EE ModeratorCommented:
Are you trying to figure out quarters?  datediff functions

You can use datediff to get days, weeks, quarters, months etc.  Maybe that makes it easier?
0

Author, Web DeveloperAuthor Commented:
No, everyone miss understood me.
I guess that is my fault for not making it clear.

Lets try this again.
The dates, when how to look at the numbers.
The numbers are not in dates.

So.

NewDate = 1/7/2013
OldDate =   1/2/2013
(For measurement)
NewMess 7 4/8
OldMess    7 2/8

OK, lets say that on the date:
OldDate (1/2/2013)
You have the measurement of
OldMess   ( 7 2/8 )

And then on the New Date
NewDate (1/7/2013)
You have the measurement of
NewMess   ( 7 4/8 )

This would result in the measurement being a Gain of 2/8

I am so, very very sorry, that I did not clarify that these are not dates.
It is just that we have to look at the date that is entered, to see if the numbers are lower or higher than a previous date given.
0

Commented:
So the page would collect a measurement on a particular date and them another measurement on another date.

It would then show the gain or loss over the period.

That's one question.

Does the page need to use fractions?

If so, the trick would be to do all the calculations and then use the excellent function linked by Padas above to generate a result in fractions.
0

Developer & EE ModeratorCommented:
Did the link I posted for converting decimal to fractions help.  That sounds like what you need.
0

Commented:
Hi carrzkiss,

Are the measurements always in 8th's, and is the 7 constant? So, which of these are valid:

7 4/8
7 1/2
.
24 2/8
24 1/4

1/8
0 1/8

if 1/8th's is the granularity, could we use one function to convert to "grains" and then do the calc, and then another function to convert back to wholes and fractions?

HTH

GH
0

Author, Web DeveloperAuthor Commented:
@padas, I will check on what you posted in just a moment, since it is not just for dates.

@GH
No, it is going to be different measurements.
Examples:

5 1/8
6 1/2
8 7/8
4 2/8

And so on.
It is going to be on the measurement scale of the 1/8 - 7/8
And when it is half, then it will be 1/2.

Carrzkiss
0

Author, Web DeveloperAuthor Commented:
If I use the conversion tool, to convert, how would I then compare the 2 sets of numbers?
0

Commented:
Hi!

I have hacked up a demo of how to use the Calendar control to collect two measurements on different dates and then do the appropriate calculations.
It uses the decimal to Fractions function as linked by padas. :-)

Save it in a file with the extension .HTA.

It will be recognised as a "Hypertext Application" and executes without any server.

The code and HTML are very similar to ASP pages.

There is very little error chacking so please enter non zero numbers for the denominators! :-)

``````<HTML xmlns:IE>
<TITLE>Calendar Demonstration</TITLE>
<HTA:APPLICATION
APPLICATIONNAME="Calendar Demo"
ID="CalendarDemo"
ICON="clock.ico"/>

<STYLE>
@media all
{
IE\:Calendar { behavior : url(calendar.htc) }
}
</STYLE>

<SCRIPT LANGUAGE="VBScript">
Dim dtmDateOne,dtmDateTwo
Dim fltMeasOne,fltMeasTwo
Dim strGainLoss,fltDif

Sub Calendar_OnPropertyChange( )
Dim strDate
strDate = DateSerial(Calendar.Year,Calendar.Month,Calendar.Day)
myLongDate.Value        = FormatDateTime( strDate, vbLongDate )
End Sub

Sub TodayButton_OnClick( )
Calendar.Year  = Year(Now )
Calendar.Month = Month(Now)
Calendar.Day   = Day(Now)
End Sub

' Set some of the calendar control's properties
Calendar.DayLength         = "short" 'short or long
Calendar.MonthLength       = "long" 'short or long
Calendar.ShowDateSelectors = 1
Calendar.ShowDays          = 1
Calendar.ShowTitle         = 1

' Fill in the date fields below the calendar control
Calendar_OnPropertyChange( )
End Sub

Sub OnClickButtonSelectedDate()
strDate = DateSerial(Calendar.Year,Calendar.Month,Calendar.Day)
MsgBox FormatDateTime(strDate,vbShortDate)
End Sub
Sub OnClickButtonDateOne()
'This method will be called when button "DateOne" is clicked
dtmDateOne = DateSerial(Calendar.Year,Calendar.Month,Calendar.Day)
Date_One.value=dtmDateOne
End Sub
Sub OnClickButtonDateTwo()
'This method will be called when button "DateTwo" is clicked
dtmDateTwo = DateSerial(Calendar.Year,Calendar.Month,Calendar.Day)
Date_Two.value=dtmDateTwo
End Sub
Sub OnClickButtonCalculate()
'This method will be called when button "Calculate" is clicked
message.innerhtml = ""

If dtmDateOne="" Then
message.innerhtml = "Missing date One!"
Exit sub
End If
If dtmDateTwo="" Then
message.innerhtml = "Missing date Two!"
Exit sub
End If
If dtmDateOne=dtmDateTwo Then
message.innerhtml = "The dates are the same!"
Exit sub
End If

fltMeasOne=Meas_One_Whole.value + (Meas_One_Numerator.value / Meas_One_Denominator.value)
fltMeasTwo=Meas_Two_Whole.value + (Meas_Two_Numerator.value / Meas_Two_Denominator.value)

message.innerhtml=dtmDateOne &" "& fltMeasOne &"<BR>" & dtmDateTwo &" "& fltMeasTwo

If dtmDateOne < dtmDateTwo Then
'date of first measurement is before date of second
If fltMeasOne < fltMeasTwo Then
'second measurement is higher
strGainLoss= "Gain"
fltDif = fltMeasTwo - fltMeasOne
Else
'second mesurement is lower
strGainLoss= "Loss"
fltDif = fltMeasOne - fltMeasTwo

End If
Else
'second date is before first date
If fltMeasOne < fltMeasTwo Then
strGainLoss= "Loss"
fltDif = fltMeasTwo - fltMeasOne
Else
strGainLoss= "Gain"
fltDif = fltMeasOne - fltMeasTwo

End If

End If

bigresult.value= strGainLoss & vbTab & DecimalToFraction(fltDif,True)

End Sub

Function DecimalToFraction(dec, mixed)
'Decimal -> Fraction Conversion vbScript Function
'9/20/02, Jamie Begin (jjbegin@infiniteblue.biz)
'[Adapted from an algorithm by John Kennedy (rkennedy@ix.netcom.com)]
'
'Input parameter(s):
' dec [single] The decimal value to be converted to a fraction.
' mixed [boolean]
'		True = Return a mixed number if dec > 1
'		False = Return an improper fraction if dec > 1
'  ex.: 3.25 equals "13/4" as an improper fraction and "3 1/4" as a mixed number.

Dim ds, fn, fd, pd, tmp, acc, oi

ds = 1
If (dec < 0) Then ds = -1
dec = abs(dec)

If mixed Then
oi = cstr(int(dec))
dec = (dec - oi)
End If

If dec = int(dec) Then
fn = (dec * ds)
fd = 1
Else
z = dec : pd = 0 : fd = 1 : acc = .5
Do
acc = (acc * 0.1)
Do
z = 1 / (z - int(z))
tmp = fd
fd = fd * int(z) + pd
pd = tmp
fn = int(dec * fd + 0.5)
Loop Until (abs((dec - (fn / fd))) < acc) or (z = int(z))
fn = (ds * fn)
Loop While Not (fn/fd) = csng(dec)
End If

If mixed Then
DecimalToFraction = oi & " " & cstr(fn) & "/" & cstr(fd)
Else
DecimalToFraction = cstr(fn) & "/" & cstr(fd)
End If
End Function

</SCRIPT>
<BODY>

<IE:Calendar id="Calendar" style="width : 250; height : 250; border : 1px solid black;"></IE:Calendar>
<BR>
Selected Date:<INPUT ID="myLongDate" TYPE="text" SIZE="32" READONLY>
<BR>
<INPUT ID="TodayButton" TYPE="button" VALUE="Today">
<BR>

Select a data on the calendar and enter the whole , numerator and denominator of the first measurement you wish to record
<BR>

<textarea name="Date_One" id="Date_One" rows="1" cols="32"></textarea>
Whole      <textarea name="Meas_One_Whole" id="Meas_One_Whole" rows="1" cols="4"></textarea>
Numerator  <textarea name="Meas_One_Numerator" id="Meas_One_Numerator" rows="1" cols="4"></textarea>/
Denominator<textarea name="Meas_One_Denominator" id="Meas_One_Denominator" rows="1" cols="4"></textarea>
<input type="button" name="DateOne" id="DateOne" value="Measurement one" onclick="OnClickButtonDateOne">
<BR>
Select a data on the calendar and enter the whole , numerator and denominator of the Second measurement you wish to record
<BR>

<BR>
<textarea name="Date_Two" id="Date_Two" rows="1" cols="32"></textarea>
Whole      <textarea name="Meas_Two_Whole" id="Meas_Two_Whole" rows="1" cols="4"></textarea>
Numerator  <textarea name="Meas_Two_Numerator" id="Meas_Two_Numerator" rows="1" cols="4"></textarea>/
Denominator<textarea name="Meas_Two_Denominator" id="Meas_Two_Denominator" rows="1" cols="4"></textarea>
<input type="button" name="DateTwo" id="DateTwo" value="Measurement Two" onclick="OnClickButtonDateTwo">

<BR>

<input type="button" name="Calculate" id="Calculate" value="Calculate" onclick="OnClickButtonCalculate">
<br>
<textarea name="BigResult" id="BigResult" rows="1" cols="40"></textarea>

<BR>
<span name="message" id="message"></span>

<BR>
<a href="http://msdn.microsoft.com/en-us/library/ms531943(VS.85).aspx">Reference</a>
<BR><BR>
Edit the <i>calendar.htc</i> file in Notepad to set the days and months names in your local language.

</BODY>
</HTML>
``````

TRM
0

Developer & EE ModeratorCommented:
Do your math first.  Then you end up with something like 2.25.  Then just run it as a function.

<%
x=2.25
y=DecimalToFraction(x, 1) ' will return 2 1/4
z=DecimalToFraction(x, 0) ' will return 10/4
%>

``````Function DecimalToFraction(dec, mixed)
'Decimal -> Fraction Conversion vbScript Function
'9/20/02, Jamie Begin (jjbegin@infiniteblue.biz)
'[Adapted from an algorithm by John Kennedy (rkennedy@ix.netcom.com)]
'
'Input parameter(s):
' dec [single] The decimal value to be converted to a fraction.
' mixed [boolean]
'		True = Return a mixed number if dec > 1
'		False = Return an improper fraction if dec > 1
'  ex.: 3.25 equals "13/4" as an improper fraction and "3 1/4" as a mixed number.

Dim ds, fn, fd, pd, tmp, acc, oi

ds = 1
If (dec < 0) Then ds = -1
dec = abs(dec)

If mixed Then
oi = cstr(int(dec))
dec = (dec - oi)
End If

If dec = int(dec) Then
fn = (dec * ds)
fd = 1
Else
z = dec : pd = 0 : fd = 1 : acc = .5
Do
acc = (acc * 0.1)
Do
z = 1 / (z - int(z))
tmp = fd
fd = fd * int(z) + pd
pd = tmp
fn = int(dec * fd + 0.5)
Loop Until (abs((dec - (fn / fd))) < acc) or (z = int(z))
fn = (ds * fn)
Loop While Not (fn/fd) = csng(dec)
End If

If mixed Then
DecimalToFraction = oi & " " & cstr(fn) & "/" & cstr(fd)
Else
DecimalToFraction = cstr(fn) & "/" & cstr(fd)
End If
End Function
``````
0

Commented:
I tried the code I pasted up but it does not work for some reason. :-(

This is teh file re-named to .txt

TRM
ee-test-gainloss.txt
0

Commented:
Just being picky...
It looks like you'll need to do a little post-DecimalToFraction-processing to change
"2 1/4"
into
"2 2/8"

Something along the lines of locating any " " and, of course, then the "/" to find the numerator and denominator so you can convert the fraction into 8ths.

Maybe I'm way over thinking it now... are they allowed to enter different fractions?  like thirds and quarters?  or is everything always in eighths?
0

Author, Web DeveloperAuthor Commented:
nap0leon

You bring up a really good point.
However, There will be specific instructions, to let the members know, that they can only put in numbers, that are on the tape.
Which is in 1/8
(I DID not mean to write up 1/2 above in my previous posting, it will all be done in 1/8-7/8)
So, what I would need to do, I would think, would be to error check, to make sure that all numbers end in /8
So, everything should be: Example 7 1/8 (or) 22 5/8
And so on.

I will check on the codes provided and will post back.
0

Author, Web DeveloperAuthor Commented:
@Tardisrepairman
I am not really sure what to do with your code.

The numbers are already listed as Fraction's
7 1/8
So the only thing that I need to do, is to compare the 2 dated Numbers sequences.
0

Commented:
how to alter "DeceimalToFractions" to force it to output 8ths:
original line commented out
replace with "fd=8"

``````				fd = 8
'fd = fd * int(z) + pd
``````
0

Commented:
Hi !

Please print out and burn the earlier code. ;-)

This short section shows the logic for the dates and values to show gain or loss.

``````dtmDateOne = DateSerial(2013,1,4)

intWholeone = 1
intNumeratorOne = 3
intDenominoatorOne = 8

fltMeasOne = intWholeone + (intNumeratorOne / intDenominoatorOne)

WScript.Echo dtmDateOne & vbTab & fltMeasOne

dtmDateTwo = DateSerial(2013,1,5)

intWholeTwo = 3
intNumeratorTwo = 4
intDenominoatorTwo = 8

fltMeasTwo = intWholeTwo + (intNumeratorTwo / intDenominoatorTwo)

WScript.Echo dtmDateTwo & vbTab & fltMeasTwo

If dtmDateOne < dtmDateTwo Then
'date of first measurement is before date of second
If fltMeasOne < fltMeasTwo Then
'second measurement is higher
strGainLoss= "Gain"
fltDif = fltMeasTwo - fltMeasOne
Else
'second mesurement is lower
strGainLoss= "Loss"
fltDif = fltMeasOne - fltMeasTwo

End If
Else
'second date is before first date
If fltMeasOne < fltMeasTwo Then
strGainLoss= "Loss"
fltDif = fltMeasTwo - fltMeasOne
Else
strGainLoss= "Gain"
fltDif = fltMeasOne - fltMeasTwo

End If

End If

WScript.Echo strGainLoss & vbTab & DecimalToFraction(fltDif , true)

Function DecimalToFraction(dec, mixed)
'Decimal -> Fraction Conversion vbScript Function
'9/20/02, Jamie Begin (jjbegin@infiniteblue.biz)
'[Adapted from an algorithm by John Kennedy (rkennedy@ix.netcom.com)]
'
'Input parameter(s):
' dec [single] The decimal value to be converted to a fraction.
' mixed [boolean]
'		True = Return a mixed number if dec > 1
'		False = Return an improper fraction if dec > 1
'  ex.: 3.25 equals "13/4" as an improper fraction and "3 1/4" as a mixed number.

Dim ds, fn, fd, pd, tmp, acc, oi

ds = 1
If (dec < 0) Then ds = -1
dec = abs(dec)

If mixed Then
oi = cstr(int(dec))
dec = (dec - oi)
End If

If dec = int(dec) Then
fn = (dec * ds)
fd = 1
Else
z = dec : pd = 0 : fd = 1 : acc = .5
Do
acc = (acc * 0.1)
Do
z = 1 / (z - int(z))
tmp = fd
fd = fd * int(z) + pd
pd = tmp
fn = int(dec * fd + 0.5)
Loop Until (abs((dec - (fn / fd))) < acc) or (z = int(z))
fn = (ds * fn)
Loop While Not (fn/fd) = csng(dec)
End If

If mixed Then
DecimalToFraction = oi & " " & cstr(fn) & "/" & cstr(fd)
Else
DecimalToFraction = cstr(fn) & "/" & cstr(fd)
End If
End Function
``````
0

Commented:
You could limit the selections by using a listbox.

``````Sub OnChangeSelectEighths()
MsgBox Eighths.value
'This method will be called when select "Eights" is changed
End Sub
</script>

<body bgcolor="white">

<select name="Eighths" id="Eighths" size=1 onchange="OnChangeSelectEighths">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
</select>
``````
0

Developer & EE ModeratorCommented:
I would keep all numbers you are processing as decimal and use the fraction only for display.  That will be the easy route.

If you are numbers in a drop down for instance, use the function to display 1.25 as 1 1/4 but when it gets posted to the db or form processing page, it gets posted as 1.25.  Any other way  you are just doing too much work.
0

Author, Web DeveloperAuthor Commented:
That makes a lot of sense.
OK, How would I write out all the fractions?

1/8
2/8
3/8
4/8
5/8
6/8
7/8
(8 is the next number, so that is not included)

@Tardisrepairman
Using the selection box, that never dawned on me, to use it.
Great idea... Good Suggestion on that one.

Also, to your last code, if you can make up an actual working page, that would be great.
As I have no clue on how to use your code.
0

Author, Web DeveloperAuthor Commented:
What I was thinking about doing, (Please let me know rather this would be a good idea or not)

have 2 drop list.
1 = Whole number
1 = 8

So, you select from the
Whole Number = 7
From the 8 = 2/8

Then when inserted into the database, it will insert as  7 2/8 (or) the Decimal value of the number.

This sounds like a cool way to do it.
It will make it simplified for the user.

-----
Now, about the compare of the 2 numbers.
0

Developer & EE ModeratorCommented:
Keep it simple!!  Keep all data in decimal.  And convert it only for display

Input form field
``````<label>Pick your stuff</label>
<select name="numbers">
<%
for each x in MyData
' x might = 4.5 so in fraction would be 4 1/2
' if the number needs to be in another denomination like 4 4/8 we can adjust the function
%>
<option value="<%=x%>"><%=DecimalToFraction(x, 1) %></option>

<%
next
%>
</select>
``````
0

Developer & EE ModeratorCommented:
``````<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
Dim f
Set f=Server.CreateObject("Scripting.Dictionary")

%>

<!DOCTYPE HTML>
<html>
<meta charset="UTF-8">
<title>Untitled Document</title>

<body>
<select name="measures">
<%
MinNum=1
MaxNum=50

for theNums=MinNum to MaxNum
for each x in f
'response.write theNums &" "& f.item(x)
response.write "<option value="""&theNums+x&""">"&theNums &" "& f.item(x)&"</option>"
next

next
%>

</select>
</body>
</html>
``````
0

Commented:
A drop down for the whole numbers would limit you to the number of options in the list but if the measurements are coming from a tape measure that may not be a problem. :-)

VBScript stores date and time as serial numbers (same as excel) so you can check if one is before the other with a simple compare.

You would have date1, measurement1 and date2,measurement2

to get the result you want, you would use three "IF" statements. nested together.

If date1 < date2 then
' this means the first date is before the second date
if measurement 1 < measurement 2 then
'this means that measurement less than measurement 2
'if the measurement is larger later, then there is a gain!
strLossGain="Gain"
measurementDifference=measurement2-measurement1
' we have already found that measurement2 is larger than measurement1 so
' measurement2-measurement1 will be positive.
else
'if measurement1 is NOT less than measurement 2 then there is a loss
strLossGain = "Loss"
measurementDifference=measurement1-measurement2
' in this case measurement1 is larger than measurement2 so
' measurement1-measurement2 will be positive.
end if
else
' this means the first date is After the second date
if measurement1 < measurement2 then
'this means that measurement1 is less than measurement 2
'if the measurement is smaller later, then there is a loss!
strLossGain="Loss"
measurementDifference=measurement2-measurement1
' we have already found that measurement2 is larger than measurement1 so
' measurement2-measurement1 will be positive.
else
'if measurement1 is  more than earlier measurement 2 then there is a Gain!
strLossGain = "Gain"
measurementDifference=measurement1-measurement2
' in this case measurement1 is larger than measurement2 so
' measurement1-measurement2 will be positive.
end if
end if

This works out the gain/loss and also returns the difference in measurement.
0

Author, Web DeveloperAuthor Commented:
That is pretty sweet, different from what I was going to do, however, better.
There is still the issue of comparing the 2 values together, to get the sum of the difference rather minus or plus.
0

Commented:
Hi!

to try the html bits of the page you could copy this code to
http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_form_submit

``````<!DOCTYPE html>
<html>
<body>

<form action="demo_form.asp">
First measurement: <input type="date" name="DateOne" >
Units: <input type="number" name="M1Units" min="1" max="20">
Eighths: <input type="number" name="M1Eighths" min="1" max="7">

<br>
First measurement: <input type="date" name="DateTwo" >
Units: <input type="number" name="M2Units" min="1" max="20">
Eighths: <input type="number" name="M2Eighths" min="1" max="7">

<input type="submit" value="Submit">
</form>

<p>Click the "Submit" button and the form-data will be sent to a page on the server called "demo_form.asp".</p>

</body>
</html>
``````
0

Author, Web DeveloperAuthor Commented:
@Tardisrepairman
Thanks for the added information, I will look into what you have provided.
However, on your last post.   Http:38765404
I do not really know how to take that one, some people may take offense to it, if they already know hot to process a form.
So, I would really love to hear your reason as to why you posted it for.

Going to try your code out now.
0

Author, Web DeveloperAuthor Commented:
Let me run through the code, and make sure that I understand everything, and I will get back with you later on this evening or tomorrow sometime.

You Rock, as Always.
Carrzkiss
0

Author, Web DeveloperAuthor Commented:
One thing I just noticed.
OK, you start out with
5 1/8
You choose
9 1/8
It should be       4

1 1/8
And should be:  -4

Were would we need to make this change at?
0

Developer & EE ModeratorCommented:
Thanks.

In this area

OldNumber=5.125
OldNumberFrac=MakeFraction(OldNumber)
NewNumber=request.form("measures")
NewNumberFrac=MakeFraction(NewNumber)
Difference=cdbl(OldNumber)-cdbl(NewNumber)
DifferenceFrac=MakeFraction(Difference)

change
Difference=cdbl(OldNumber)-cdbl(NewNumber)
to
Difference=cdbl(NewNumber)-cdbl(OldNumber)
0

Author, Web DeveloperAuthor Commented:
Better.
Will get back with you later on Padas.
Have a rockin evening!
0

Author, Web DeveloperAuthor Commented:
I seem to have run into a problem, and not really sure as to the cause.

OK, I have 13 total drop menus
So, I created 13 files with the same code in them.
However, each one has a different Library record.

Set f=Server.CreateObject("Scripting.Dictionary")
Set t=Server.CreateObject("Scripting.Dictionary")
exc....

Now, the code breaks on this line here.

MakeFraction= theInt&" "&t.item(theFrac)

With the following error.

Object Required: 't'

So, what can I do to get passed this issue?
All files are different in this case, each showing the same line, with the same error, just corresponding to the library name that is given in each file.

NOW, if you know of a better way to do this, please by all means, let me know.
right now, I have (As stated above), created 13 files, and each file has its own Library name, and <input name=""> as well.

Carrzkiss
0

Developer & EE ModeratorCommented:
Can we please start at the end?  How about making up a static form with static fake data and results.  Why 13 files? and 13 drop downs?    If the code is the same in all 13 just reuse the 1.

``````<form method="post">
<select name="measures1">
<%
MinNum=1
MaxNum=50
for theNums=MinNum to MaxNum
for each x in f
'response.write theNums &" "& f.item(x)
response.write "<option value="""&theNums+x&""">"&theNums &" "& f.item(x)&"</option>"
next
next
%>
</select>

<select name="measures2">
<%
MinNum=1
MaxNum=50
for theNums=MinNum to MaxNum
for each x in f
'response.write theNums &" "& f.item(x)
response.write "<option value="""&theNums+x&""">"&theNums &" "& f.item(x)&"</option>"
next
next
%>
</select>
:
:
<select name="measures13">
<%
MinNum=1
MaxNum=50
for theNums=MinNum to MaxNum
for each x in f
'response.write theNums &" "& f.item(x)
response.write "<option value="""&theNums+x&""">"&theNums &" "& f.item(x)&"</option>"
next
next
%>
</select>

<input name="Submit" type="submit" value="Submit">
</form>
``````
0

Author, Web DeveloperAuthor Commented:
Damn, I knew there was a better way of doing it.
Sometimes I will do something, and then I sit back for a moment, and think.
Hold it, there is a better way of doing this.
In this case, I was just eating brunch, and was thinking about a way to do this, and I come in, to your coding here.

Sometimes it helps to have someone else to look at what is right or possible wrong, to get the best results out of your work.

will get back with you after I test it out.
0

Author, Web DeveloperAuthor Commented:
I think we can close this one out now.
you are a great teacher, and are wonderful at what you do.

I hope and wish the very best for you in your future work and endeavors.

Carrzkiss
0

Developer & EE ModeratorCommented:
Thank you for the kind words!

I think sometimes it is easy to get caught up in trying to figure things out out the way we first thought it should be and the harder it gets, the more we want to figure out the puzzle that way without regards to alternatives.  I know for myself as soon as things start getting complex it's time to stop and figure out the easy way.
0

Author, Web DeveloperAuthor Commented:
Correct.
Usually, when I get caught into a situation that I cannot find a way around, I will usually step back, play my guitar, go for a walk, watch some TV, or something.
And it is usually when you least expect it, the idea comes in your head.
I try to keep paper and pencil with me all the time, so I can jot down notes, so when I do figure out my issues, I will NOT forget them.

Going to the gym with my son.
Have a good one Padas, and continue doing what you do.

Also, do you have a website? Would love to check out your work.
If you do not want to post it here, you can send it to my email, listed in my profile.

Later.
Carrzkiss
0

Author, Web DeveloperAuthor Commented:
I have run into a possible issue with the code (I think)

If you change the set number to: 13.625 (13 5/8)
Then you enter (13 4/8)
It gives this as answer:  -1 7/8

Would this not be:    - 1/8

Or am I missing something?

However, if you choose: 13 6/8 from the list
Then the given value is: 1/8
Like it should be.
0

Developer & EE ModeratorCommented:
New Math.  Like the carpenter's basement, I don't have a site.  Been too busy.  This year though!

Update the function

``````function MakeFraction(n)
theInt=fix(n)
theFrac=n-theInt
'response.write "N = "&n&" theINT  "&theInt &" theFrac "&theFrac&"<br>"

if theInt<>0 then
MakeFraction= theInt&" "&f.item(abs(theFrac))

else
if theFrac<>0 then
MakeFraction= f.item(abs(theFrac))
if n<0 then
MakeFraction="-"&MakeFraction
end if
else
MakeFraction="0" 'everythign is zero
end if
end if
end function
``````
0

Developer & EE ModeratorCommented:
Here is full revised with checking figures after post.

``````<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
Dim f
Set f=Server.CreateObject("Scripting.Dictionary")

%>
<%
function MakeFraction(n)
theInt=fix(n)
theFrac=n-theInt
response.write "N = "&n&" theINT  "&theInt &" theFrac "&theFrac&"<br>"

if theInt<>0 then
MakeFraction= theInt&" "&f.item(abs(theFrac))

else
if theFrac<>0 then
MakeFraction= f.item(abs(theFrac))
if n<0 then
MakeFraction="-"&MakeFraction
end if
else
MakeFraction="0" 'everythign is zero
end if
end if
end function
%>
<!DOCTYPE HTML>
<html>
<meta charset="UTF-8">
<title>Untitled Document</title>

<body>
<%
OldNumber=13.625
OldNumberFrac=MakeFraction(OldNumber)
NewNumber=request.form("measures")
NewNumberFrac=MakeFraction(NewNumber)
Difference=cdbl(NewNumber)-cdbl(OldNumber)
DifferenceFrac=MakeFraction(Difference)
response.write "DIF "&Difference
%>

<h2> The old number is <%=OldNumberFrac%>.  The number you chose is
<%

if request.form("measures")<>"" then

response.write NewNumberFrac&".  The difference is "&DifferenceFrac
else
response.write "No Number"
end if
%>
</h2>
<form method="post">
<select name="measures">
<%
MinNum=1
MaxNum=50

for theNums=MinNum to MaxNum
for each x in f
'response.write theNums &" "& f.item(x)
response.write "<option value="""&theNums+x&""">"&theNums &" "& f.item(x)&"</option>"
next

next
%>

</select>
<input name="Submit" type="submit" value="Submit">
</form>
</body>
</html>
``````
0

Author, Web DeveloperAuthor Commented:
Wonderful!!!!
Hopefully this year you will be able to get a site up and running.
For me, it is an expression of one self. Especially if people really enjoy what I have done.

Had a great sleep, now time to get to work.
Carrzkiss
0

Author, Web DeveloperAuthor Commented:
An update, for anyone that ever wants to use this code for anything.

To show Loss and Gain, replace a portion of the math.

``````			if n<0 then
MakeFraction="Loss -"&MakeFraction
elseif n>0 then
MakeFraction="Gain -"&MakeFraction
end if
``````

You ROCK!!!!

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