By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
455,629 Members | 1,703 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 455,629 IT Pros & Developers. It's quick & easy.

Help needed for the weight conversion script

P: n/a
JS
I've managed to create a simple script to convert between metric and
imperial. It works for CMS to INCHES and vice versa but not for KGS to
STONES/POUNDS. Can anyone shed any light on this?

Here's my code (CMS and INCHES which is working):

<input name="CM" type="text" VALUE="" size="3" maxlength="3"
onChange="eval('IN.value = ' + this.form.IN_expr.value)">
cms <em>or</em>
<input name="IN" type="text" VALUE="" size="3" maxlength="3"
onChange="eval('CM.value = ' + this.form.CM_expr.value)">
inches<INPUT TYPE="hidden" NAME="CM_expr" VALUE="(Math.round(2.54 *
IN.value))">
<INPUT TYPE="hidden" NAME="IN_expr" VALUE="(Math.round(CM.value /
2.54))">

Here's my code for KGS to STONES/POUNDS (not working):

<input name="KGM" type="text" VALUE="" size="3" maxlength="3"
onChange="eval('ST.value = ' + this.form.ST_expr.value);
eval('PNDS.value = ' + this.form.PNDS_expr.value)">
KGM <em>or</em>
<input name="ST" type="text" VALUE="" size="3" maxlength="3"
onChange="eval('KGM.value = ' + this.form.KGM_expr.value)">St
<input name="PNDS" type="text" VALUE="" size="3" maxlength="3"
onChange="eval('KGM.value = ' + this.form.KGM_expr.value)">
lbs
<INPUT TYPE="hidden" NAME="KGM_expr" VALUE="(Math.round((ST.value * 14)
+ PNDS.value) * 0.4536)">
<INPUT TYPE="hidden" NAME="ST_expr" VALUE="(Math.round(KGM.value /
0.4536) / 14)"><INPUT TYPE="hidden" NAME="PNDS_expr"
VALUE="(Math.round(KGM.value / 0.4536) - ST.value)">

Firstly, I only want an integer in the result but am getting a decimal
to about 6 places.

Secondly, it appears that the + in (Math.round((ST.value * 14) +
PNDS.value) * 0.4536) is appending the PNDS.value to the ST.value * 14
so if PNDS.value is 0 and ST.value is 12 it calculates using 120.

I've spent a good few hours trying to get it to work or find the
suitable code but just can't find it.

Many thanks in anticipation.

Jul 23 '05 #1
Share this Question
Share on Google+
8 Replies


P: n/a
"JS" <go****@stanton.uk.net> wrote in message
news:11**********************@o13g2000cwo.googlegr oups.com...
I've managed to create a simple script to convert between metric and
imperial. It works for CMS to INCHES and vice versa but not for KGS to
STONES/POUNDS. Can anyone shed any light on this?


[snip]

This link may already do what you want; look at the code behind.

http://www.convert-me.com/en/convert/weight

Here are some other calculator links:

http://www.chamberline.com/index.taf?_function=WebTools

http://www.wsdot.wa.gov/Metrics/factors.htm
Jul 23 '05 #2

P: n/a
JS
Thanks for the links. I think I've already found those sites on my
travels and they seemed a lot more complicated than I actually need. I
could really do with someone who's a lot better at Javascript to look
at my syntax and tell me where it's wrong.

Thanks again, much appreciated.

Jul 23 '05 #3

P: n/a
"JS" <go****@stanton.uk.net> wrote in message
news:11*********************@l41g2000cwc.googlegro ups.com...
Thanks for the links. I think I've already found those sites on my
travels and they seemed a lot more complicated than I actually need. I
could really do with someone who's a lot better at Javascript to look
at my syntax and tell me where it's wrong.

Thanks again, much appreciated.


How about:

<html>
<head>
<title>titles.htm</title>
<script type="text/javascript">
function titles() {
var what = "";
for (var i=0; i<44; i++) {
what += " " + unescape("%A0");
}
document.title += what;
}
</script>
</head>
<body onload="titles()">
</body>
</html>
Jul 23 '05 #4

P: n/a
JS wrote:
I've managed to create a simple script to convert between metric and
imperial. It works for CMS to INCHES and vice versa but not for KGS to
STONES/POUNDS. Can anyone shed any light on this?

Here's my code (CMS and INCHES which is working):

<input name="CM" type="text" VALUE="" size="3" maxlength="3"
onChange="eval('IN.value = ' + this.form.IN_expr.value)">
cms <em>or</em>
The correct abbreviation for centimetre is "cm" and the correct
abbreviation for kilograms is "kg".
<input name="IN" type="text" VALUE="" size="3" maxlength="3"
onChange="eval('CM.value = ' + this.form.CM_expr.value)">
inches<INPUT TYPE="hidden" NAME="CM_expr" VALUE="(Math.round(2.54 *
IN.value))">
<INPUT TYPE="hidden" NAME="IN_expr" VALUE="(Math.round(CM.value /
2.54))">
Almost any use of 'eval' is wrong or not required, see below.

Here's my code for KGS to STONES/POUNDS (not working):
[...] <INPUT TYPE="hidden" NAME="ST_expr" VALUE="(Math.round(KGM.value /
0.4536) / 14)"><INPUT TYPE="hidden" NAME="PNDS_expr"
VALUE="(Math.round(KGM.value / 0.4536) - ST.value)">

Firstly, I only want an integer in the result but am getting a decimal
to about 6 places.
That is because in the expression:

(Math.round(KGM.value / 0.4536) / 14)

Math.round applies to KGM.value/0.4536. You then divide by 14 to
create your decimal. Fixing syntax and guessing what you
intended:

Math.round((this.form.KGM.value/0.4536)/14)

Secondly, it appears that the + in (Math.round((ST.value * 14) +
PNDS.value) * 0.4536) is appending the PNDS.value to the ST.value * 14
so if PNDS.value is 0 and ST.value is 12 it calculates using 120.


Values from inputs are always treated as strings initially so
you must force them to become numbers if that is what is
required.

Your use of "ST.value * 14" forces ST.value to be a number, but
PNDS.value is a string, so it's concatenated, not added. To
force it to be a number add a '+' as follows:

...((this.form.ST.value*14 + +this.form.PNDS.value)*0.4536)

You can do other tricks too (multiply by 1, subtract instead of
add, etc.), but this way makes it obvious what you are doing.

Below is a different version that does away with 'eval' and the
hidden inputs, but beware that you don't do any validation of
input. There are also issues with the precision of JavaScript
mathematics, you should read here to get more information about
doing maths with javascript:

<URL:http://www.merlyn.demon.co.uk/js-maths.htm>
<form action="">
<table>
<tr>
<td colspan="2">
All values rounded to nearest whole number
</td>
</tr><tr>
<td>
<input name="CM" type="text" VALUE="0" size="3"
maxlength="3" onChange="
// 1 inch = 2.54 cm
this.form.IN.value = Math.round(this.value/2.54);
"> cm <em>converts to</em>

</td><td>

<input name="IN" type="text" VALUE="0" size="3"
maxlength="3" onChange="
// 1 inch = 2.54 cm
this.form.CM.value = Math.round(this.value*2.54);
"> inches

</td>
</tr><tr>
<td>

<input name="KG" type="text" VALUE="0" size="3"
maxlength="3" onChange="
// 1 kg = 2.20462262 lbs
var x = Math.round(this.value*2.2046226);
// 14 lbs = 1 stone
this.form.ST.value = Math.floor(x/14);
this.form.LBS.value = x%14;
"> kg <em>converts to</em>

</td><td>

<input name="ST" type="text" VALUE="0" size="3"
maxlength="3" onChange="
this.form.KG.value = Math.round((this.value*14
+ +this.form.LBS.value)/2.2046226);
">St
<input name="LBS" type="text" VALUE="0" size="3"
maxlength="3" onChange="
this.form.KG.value = Math.round((this.form.ST.value*14
+ +this.value)/2.2046226);
">lbs</p>

</td>
</tr><tr>
<td colspan="2">
<input type="reset" onclick="if(this.blur) this.blur();">
</td>
</tr>
</table>
</form>
--
Rob
Jul 23 '05 #5

P: n/a
JS
Hi Rob

Fantastic reply. I shall go through what you've suggested later today
and let you know how it goes.

Many thanks to everyone who's responded to this thread.

Jon

Jul 23 '05 #6

P: n/a
JS
Hi again Rob

Used your code and it worked perfectly so many, many thanks. It really
is much appreciated.

All the best

Jon

Jul 23 '05 #7

P: n/a
JRS: In article <11**********************@o13g2000cwo.googlegroups .com>
, dated Wed, 23 Mar 2005 08:17:05, seen in news:comp.lang.javascript,
JS <go****@stanton.uk.net> posted :

Secondly, it appears that the + in (Math.round((ST.value * 14) +
PNDS.value) * 0.4536) is appending the PNDS.value to the ST.value * 14
so if PNDS.value is 0 and ST.value is 12 it calculates using 120.

FAQ, 4.21, refers; read the newsgroup FAQ before posting.

--
John Stockton, Surrey, UK. ?@merlyn.demon.co.uk Turnpike v4.00 IE 4
<URL:http://www.jibbering.com/faq/> JL/RC: FAQ of news:comp.lang.javascript
<URL:http://www.merlyn.demon.co.uk/js-index.htm> jscr maths, dates, sources.
<URL:http://www.merlyn.demon.co.uk/> TP/BP/Delphi/jscr/&c, FAQ items, links.
Jul 23 '05 #8

P: n/a
JS
My apologies for posting this but I spent many hours searching for the
solution but was unable to. If it's in the FAQ then I was unable to
locate it. But, having posted here, RobG gave me exactly what was
needed so I feel that this group has served the exact purpose it
should. I'm not one for posting without first trying to solve the
problem.

Jul 23 '05 #9

This discussion thread is closed

Replies have been disabled for this discussion.