x
Solved

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

Posted on 2013-01-10
Medium Priority
323 Views
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
0
Question by:Wayne Barron
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points
• 19
• 14
• 7
• +2

LVL 54

Expert Comment

ID: 38763371
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

LVL 18

Expert Comment

ID: 38763389
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

LVL 54

Expert Comment

ID: 38763391
If you need to convert decimal to fraction using vbs or using js
0

LVL 54

Expert Comment

ID: 38763409
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

LVL 31

Author Comment

ID: 38763448
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

LVL 6

Expert Comment

ID: 38763506
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

LVL 54

Expert Comment

ID: 38763544
Did the link I posted for converting decimal to fractions help.  That sounds like what you need.
0

LVL 11

Expert Comment

ID: 38763701
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

LVL 31

Author Comment

ID: 38763739
@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

LVL 31

Author Comment

ID: 38763844
If I use the conversion tool, to convert, how would I then compare the 2 sets of numbers?
0

LVL 6

Expert Comment

ID: 38763953
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

LVL 54

Expert Comment

ID: 38764016
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

LVL 6

Expert Comment

ID: 38764087
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

LVL 18

Expert Comment

ID: 38764118
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

LVL 31

Author Comment

ID: 38764157
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

LVL 31

Author Comment

ID: 38764185
@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

LVL 18

Expert Comment

ID: 38764228
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

LVL 6

Expert Comment

ID: 38764273
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

LVL 6

Expert Comment

ID: 38764317
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

LVL 54

Expert Comment

ID: 38764382
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

LVL 31

Author Comment

ID: 38764918
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

LVL 31

Author Comment

ID: 38765038
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

LVL 54

Expert Comment

ID: 38765234
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

LVL 54

Expert Comment

ID: 38765303
``````<%@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

LVL 6

Expert Comment

ID: 38765349
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

LVL 31

Author Comment

ID: 38765365
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

LVL 6

Expert Comment

ID: 38765404
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

LVL 54

Accepted Solution

Scott Fell,  EE MVE earned 2000 total points
ID: 38765493

``````<%@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

LVL 31

Author Comment

ID: 38765535
@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

LVL 31

Author Comment

ID: 38765537
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

LVL 31

Author Comment

ID: 38765545
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

LVL 54

Expert Comment

ID: 38765575
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

LVL 31

Author Comment

ID: 38765589
Better.
Will get back with you later on Padas.
Have a rockin evening!
0

LVL 31

Author Comment

ID: 38767933
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

LVL 54

Assisted Solution

Scott Fell,  EE MVE earned 2000 total points
ID: 38768083
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

LVL 31

Author Comment

ID: 38768317
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

LVL 31

Author Closing Comment

ID: 38768359
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

LVL 54

Expert Comment

ID: 38768393
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

LVL 31

Author Comment

ID: 38768425
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

LVL 31

Author Comment

ID: 38769319
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

LVL 54

Expert Comment

ID: 38769341
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

LVL 54

Expert Comment

ID: 38769342
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

LVL 31

Author Comment

ID: 38769895
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

LVL 31

Author Comment

ID: 38769901
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

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.
Nothing in an HTTP request can be trusted, including HTTP headers and form data.  A form token is a tool that can be used to guard against request forgeries (CSRF).  This article shows an improved approach to form tokens, making it more difficult toâ€¦
The viewer will learn the basics of jQuery, including how to invoke it on a web page. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery.: (CODE)
The viewer will learn the basics of jQuery including how to code hide show and toggles. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQueryâ€¦
###### Suggested Courses
Course of the Month15 days, 7 hours left to enroll