PDA

View Full Version : Mathematics - Totals


flying
10-14-2002, 08:17 PM
With plenty of your help I have a form that will multiply numbers for subtotals. I also have it so it will add those subtotals for a total. However, it only works IF each line is used. Can it work if the user only uses calculations for say two of the three lines?

Any help will be greatly appreciated!

As always,

Flying (by the seat of my pants)



<html>
<head>
<title>test</title>
<script language="javascript">
function calculate1() {
test1 = parseFloat(document.form1.text1a.value) * parseFloat(document.form1.text1b.value);
newtest1 = Math.round(test1 *100)/100
document.form1.result1.value = newtest1;
}
function calculate2() {
test2 = parseFloat(document.form1.text2a.value) * parseFloat(document.form1.text2b.value);
newtest2 = Math.round(test2 *100)/100
document.form1.result2.value = newtest2;
}
function calculate3() {
test3 = parseFloat(document.form1.text3b.value) * parseFloat(document.form1.text3a.value);
newtest3 = Math.round(test3 *100)/100
document.form1.result3.value = newtest3;
}
function calculatetot() {
total1a = parseFloat(document.form1.result1.value) + parseFloat(document.form1.result2.value) + parseFloat(document.form1.result3.value);
total1b = Math.round(total1a*100)/100
document.form1.resulttot.value = total1b;
}
</script>
</head>
<body>
<form name="form1">
<input type="text" name="text1a" value="" size="20">
<input type="text" name="text1b" value="" size="20">
<input type="button" value="calculate" onClick="calculate1()">
<input type="text" value="" name="result1" size="20"> <BR>

<input type="text" name="text2a" value="" size="20">
<input type="text" name="text2b" value="" size="20">
<input type="button" value="calculate" onClick="calculate2()">
<input type="text" value="" name="result2" size="20"> <BR>

<input type="text" name="text3a" value="" size="20">
<input type="text" name="text3b" value="" size="20">
<input type="button" value="calculate" onClick="calculate3()">
<input type="text" value="" name="result3" size="20"> <BR>

<input type="button" value="total" onClick="calculatetot()">
<input type="text" value="" name="resulttot" size="20">

</form>
</body>
</html>

beetle
10-14-2002, 08:52 PM
Here you go. I modified your other functions into one...because it's silly to have a separate function for each multiplication...

<html>
<head>
<title>test</title>
<script language="javascript">
function multiply(f,a,b,c) {
var product = parseFloat(f.elements[a].value) * parseFloat(f.elements[b].value);
f.elements[c].value = Math.round(product*100)/100;
}
function getTotal(f) {
var total = 0;
var subtotals = ['result1','result2','result3'];
for (var i = 0; i < subtotals.length; i++) {
var temp = f.elements[subtotals[i]].value;
total += (isNaN(temp) || temp == "") ? 0 : parseFloat(temp);
}
f.elements['resulttot'].value = Math.round(total*100)/100;
}
</script>
</head>
<body>
<form name="form1">
<input type="text" name="text1a" value="" size="20">
<input type="text" name="text1b" value="" size="20">
<input type="button" value="calculate" onClick="multiply(this.form,'text1a','text1b','result1');">
<input type="text" value="" name="result1" size="20"> <BR>

<input type="text" name="text2a" value="" size="20">
<input type="text" name="text2b" value="" size="20">
<input type="button" value="calculate" onClick="multiply(this.form,'text2a','text2b','result2');">
<input type="text" value="" name="result2" size="20"> <BR>

<input type="text" name="text3a" value="" size="20">
<input type="text" name="text3b" value="" size="20">
<input type="button" value="calculate" onClick="multiply(this.form,'text3a','text3b','result3');">
<input type="text" value="" name="result3" size="20"> <BR>

<input type="button" value="total" onClick="getTotal(this.form)">
<input type="text" value="" name="resulttot" size="20">

</form>
</body>
</html>

flying
10-14-2002, 11:16 PM
FANTASTIC! Thank you so much - not only for answering my question, but also for cleaning up the mess I made of the whole thing.

LAST QUESTION (I hope). How can I write a window alert that comes up if the resulttot is less than 30? All I need it to say is "Your result is less than 30"

Thanks again!!

beetle
10-14-2002, 11:29 PM
function getTotal(f) {
var total = 0;
var subtotals = ['result1','result2','result3'];
for (var i = 0; i < subtotals.length; i++) {
var temp = f.elements[subtotals[i]].value;
total += (isNaN(temp) || temp == "") ? 0 : parseFloat(temp);
}
var t = Math.round(total*100)/100;
if (t<30) alert("Your result is less than 30");
f.elements['resulttot'].value = t;
}Also, you'll probably want to make the form elements that receive totals or calculations from the JS readonly so users can't manipulate them...

flying
10-14-2002, 11:50 PM
Wow! That is great. Thank you so much.