Time/distance converter help (ptII)

D

Dirntknow

Further to my recent post in this newsgroup i've got to admit i'm
struggling. I've no experience with javascript or it's workings. What i'd
like is a simple converter to allow a user to input the distance travelled
in miles and the time in hours and minutes, the result being an average
speed. What i'd appreciate is for someone to write the script for me and
post here if possible. I am willing to learn but don't know where to start
and i've found no tutorial that will help me!

Thanks...Andre
 
O

OmegaJunior

Further to my recent post in this newsgroup i've got to admit i'm
struggling. I've no experience with javascript or it's workings. What i'd
like is a simple converter to allow a user to input the distance
travelled
in miles and the time in hours and minutes, the result being an average
speed. What i'd appreciate is for someone to write the script for me and
post here if possible. I am willing to learn but don't know where to
start
and i've found no tutorial that will help me!

Thanks...Andre

Assuming you want to run this script in a web page:

<html>
<head>
<title>Converting distance and time into speed</title>
<script type="text/javascript">
function Calculate() {
var theDistance = new Number(document.forms['theForm'].txtDistance.value);
var theTimeUsed = new Number(document.forms['theForm'].txtTimeUsed.value);
if(!NaN(theDistance)&&!NaN(theTimeUsed)&&(theTimeUsed>0)) {
document.forms['theForm'].txtResult = (theDistance / (theTimeUsed/60));
return true;
}
return false;
}
</script>
</head>
<body>
<h1>Converting distance and time into speed</h1>
<form name="theForm" id="theForm" action="#" onsubmit="Calculate();return
false;">
<fieldset><legend>Enter information:</legend>
<p><label for="txtDistance">Distance: <input type="text"
name="txtDistance" id="txtDistance" value="0" /> (in miles).</label></p>
<p><label for="txtTimeUsed">Time Used: <input type="text"
name="txtTimeUsed" id="txtTimeUsed" value="0" /> (in minutes).</label></p>
</fieldset>
<fieldset><legend>Options</legend>
<p><input type="reset" value="Cancel" /> <input type="submit"
value="Calculate!" /></p>
</fieldset>
<fieldset><legend>Result</legend>
<p><label for="txtResult">Average speed: <input type="text"
name="txtResult" id="txtResult" value="0" /> (miles per hour).</p>
</fieldset>
</body>
</html>
 
O

OmegaJunior

Further to my recent post in this newsgroup i've got to admit i'm
struggling. I've no experience with javascript or it's workings. What
i'd
like is a simple converter to allow a user to input the distance
travelled
in miles and the time in hours and minutes, the result being an average
speed. What i'd appreciate is for someone to write the script for me and
post here if possible. I am willing to learn but don't know where to
start
and i've found no tutorial that will help me!

Thanks...Andre

Assuming you want to run this script in a web page:

<html>
<head>
<title>Converting distance and time into speed</title>
<script type="text/javascript">
function Calculate() {
var theDistance = new
Number(document.forms['theForm'].txtDistance.value);
var theTimeUsed = new
Number(document.forms['theForm'].txtTimeUsed.value);
if(!NaN(theDistance)&&!NaN(theTimeUsed)&&(theTimeUsed>0)) {
document.forms['theForm'].txtResult = (theDistance /
(theTimeUsed/60));
return true;
}
return false;
}
</script>
</head>
<body>
<h1>Converting distance and time into speed</h1>
<form name="theForm" id="theForm" action="#"
onsubmit="Calculate();return false;">
<fieldset><legend>Enter information:</legend>
<p><label for="txtDistance">Distance: <input type="text"
name="txtDistance" id="txtDistance" value="0" /> (in miles).</label></p>
<p><label for="txtTimeUsed">Time Used: <input type="text"
name="txtTimeUsed" id="txtTimeUsed" value="0" /> (in
minutes).</label></p>
</fieldset>
<fieldset><legend>Options</legend>
<p><input type="reset" value="Cancel" /> <input type="submit"
value="Calculate!" /></p>
</fieldset>
<fieldset><legend>Result</legend>
<p><label for="txtResult">Average speed: <input type="text"
name="txtResult" id="txtResult" value="0" /> (miles per hour).</p>
</fieldset>
</body>
</html>

Ack. Forgot </form> before </body>.
 
R

Richard Cornford

OmegaJunior said:
if(!NaN(theDistance)&&!NaN(theTimeUsed)&&(theTimeUsed>0)) {
<snip> ^^^^^^^^^^^^^^^^

Attempting to call a number is not going to be effective.

Richard.
 
O

OmegaJunior

<snip> ^^^^^^^^^^^^^^^^

Attempting to call a number is not going to be effective.

Richard.

Erm, yeah. NaN() should be isNaN(). (Hope you meant to point that out.)
 
R

RobG

Further to my recent post in this newsgroup i've got to admit i'm
struggling. I've no experience with javascript or it's workings.

You probably wont find a single tutorial to teach you everything
that's needed, you'll need to learn about javascript in general then
apply the knowledge to problem.

You need to learn how to get values from form controls, validate the
input, display error messages, do calculations and format and present
the results.

The following should get you started, I've used an alert for the error
messages but it is much better to write them to the page in an
appropriate spot. I'll leave that to you:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<title>Units per Hour</title>
<style type="text/css">
.label {text-align: right;}
</style>

<script type="text/javascript">

// The following set of functions adds a toFixed method
// to the built-in Number object
// From clj FAQ: http://www.jibbering.com/faq/#FAQ4_6
function Stretch(Q, L, c) { var S = Q
if (c.length>0) while (S.length<L) { S = c+S }
return S
}
function StrU(X, M, N) { // X>=0.0
var T, S=new String(Math.round(X*Number("1e"+N)))
if (S.search && S.search(/\D/)!=-1) { return ''+X }
with (new String(Stretch(S, M+N, '0')))
return substring(0, T=(length-N)) + '.' + substring(T)
}
function Sign(X) { return X<0 ? '-' : ''; }
function StrS(X, M, N) { return Sign(X)+StrU(Math.abs(X), M, N) }
Number.prototype.toFixed= function(n){ return StrS(this,1,n)};

// Check a possible float - decimal place is optional
function validNum(n) {
return /^\d+\.?\d*$/.test(n);
}

// Check an int
function validInt(n) {
return /^\d+$/.test(n);
}

// Convert units to per hour
function unitsPerHr(form) {
var rate;
var dist = form.distance.value;
var time = form.time.value.split(':');
var hr = time[0];
var min = time[1];
var sec = time[2];
var err = [];

// Check distance is a valid number
if (!validNum(dist)) {
err.push('Quantity must be a valid number, e.g. 23.5');
}

// Check time parts are valid
if (!validInt(hr) || !validInt(min) || !validNum(sec)) {
err.push('Time must be hour:min:sec, e.g. 2:23:15.5');
}

// Check time numbers are within range
if (min > 59 || sec >= 60) {
err.push('Minutes and seconds must be less than 60');
}

// Convert time to decimal hours:
hr = +hr + min/60 + sec/3600;

if (hr > 0) {
rate = (dist/hr).toFixed(2);
} else {
err.push('Time must be greater than zero')
}

if (err.length > 0) {
alert(err.join('\n\n'));
} else {
document.getElementById('result').innerHTML =
rate + ' units per hour';
}
return false;
}

</script>

<form action="" onsubmit="return unitsPerHr(this);">
<table>
<tr>
<td class="label">Enter quantity:
<td><input type="text" name="distance" value="0">
<tr>
<td class="label">Enter time<br>hr:min:sec:
<td><input type="text" name="time" value="0:0:0">
<tr>
<td class="label"><input type="submit" value="Calculate">
<td><span id="result"></span>
</table>
</form>
 
V

VK

toFixed(precision?precision:2)

That would prevent 0 signs in fraction, enforcing makeToFixed(0)
transformed to makeToFixed(2)
Unless it's a contextually useful default, one should prevent 0/false
ambiguousity by something like toFixed((typeof precision == 'number')?
precision:2)
 
D

Dr J R Stockton

In comp.lang.javascript message <[email protected]
function StrU(X, M, N) { // X>=0.0
var T, S=new String(Math.round(X*Number("1e"+N)))
if (S.search && S.search(/\D/)!=-1) { return ''+X }
with (new String(Stretch(S, M+N, '0')))
return substring(0, T=(length-N)) + '.' + substring(T)
}

FYI, that's not what its author currently uses and recommends.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,534
Members
45,008
Latest member
Rahul737

Latest Threads

Top