#1
  1. No Profile Picture
    Contributing User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Jun 2012
    Posts
    156
    Rep Power
    13

    Javascript Math's help


    Hi

    I have the following coding in my website that add's or remove's prices to a quote page and works perfect but I need to insert another input field that takes the order total and divides it by 2

    Just wondering how I do that in this coding

    Below is the HTML

    Code:
    <form name="checkbox">
            
            One Page<input type="checkbox" name="PROD_CH_70.00" value="70" onchange="CalculateTotal(this.form)">
            <br>
            Two Pages<input type="checkbox" name="PROD_CH_140.00" value="140" onchange="CalculateTotal(this.form)">
            <br>
            Three Pages(Bronze Package)<input type="checkbox" name="PROD_CH_179.00" value="179" onchange="CalculateTotal(this.form)">
            <br>
            Six Pages(Silver Package)<input type="checkbox" name="PROD_CH_339.00" value="339" onchange="CalculateTotal(this.form)">
            <br>
            Ten Pages(Gold Package)<input type="checkbox" name="PROD_CH_549.00" value="549" onchange="CalculateTotal(this.form)">
            <br>
            New Business Start up<input type="checkbox" name="PROD_CH_289.00" value="289" onchange="CalculateTotal(this.form)">
            <br>
            Ecommerce Package<input type="checkbox" name="PROD_CH_449.00" value="449" onchange="CalculateTotal(this.form)">
            <br>
            SEO on all pages<input type="checkbox" name="PROD_CH_30.00" value="449" onchange="CalculateTotal(this.form)">
            <br>
            Logo Design<input type="checkbox" name="PROD_CH_25.00" value="25" onchange="CalculateTotal(this.form)">
            
     <!--<input type="text" name="PROD_DC_15" size="10" maxlength="3" onchange="CalculateTotal(this.form)">
    <input type="text" name="PROD_CC_20" size="10" maxlength="3" onchange="CalculateTotal(this.form)">-->
    <br><br>
    <span style="color: #FFFFFF;">&#xA3;<input type="text" name="TOTAL" size="10" onfocus="this.form.elements[0].focus()
    ">  
    </span>
    </form>
    Below is the Javascript coding

    Code:
    function CalculateTotal(frm) {
            var order_total = 0
    
    
            // Run through all the form fields
            for (var i=0; i < frm.elements.length; ++i) {
    
    
                    // Get the current field
                    form_field = frm.elements[i]
    
    
                    // Get the field's name
                    form_name = form_field.name
    
    
                    // Is it a "product" field?
                    if (form_name.substring(0,4) == "PROD") {
    
    
                            // If so, extract the price from the name
                            item_price = parseFloat(form_name.substring(form_name.lastIndexOf("_") + 1))
    
    
                            // Get the quantity
                            if(form_field.type == 'checkbox') {
                                    item_quantity = form_field.checked;
                            } else {
                                    item_quantity = parseInt(form_field.value);                
                            }
    
    
                            // Update the order total
                            if (item_quantity >= 0) {
                                    order_total += item_quantity * item_price
                    
                     
    
    
                            }
                    }
            }
    
    
            // Display the total rounded to two decimal places
            frm.TOTAL.value = round_decimals(order_total, 2)
            }
    
    
            function round_decimals(original_number, decimals) {
            var result1 = original_number * Math.pow(10, decimals)
            var result2 = Math.round(result1)
            var result3 = result2 / Math.pow(10, decimals)
            return pad_with_zeros(result3, decimals)
             }
    
    
            function pad_with_zeros(rounded_value, decimal_places) {
    
    
            // Convert the number to a string
            var value_string = rounded_value.toString()
            
            // Locate the decimal point
            var decimal_location = value_string.indexOf(".")
    
    
            // Is there a decimal point?
            if (decimal_location == -1) {
                    
                    // If no, then all decimal places will be padded with 0s
                    decimal_part_length = 0
                    
                    // If decimal_places is greater than zero, tack on a decimal point
                    value_string += decimal_places > 0 ? "." : ""
            }
            else {
    
    
                    // If yes, then only the extra decimal places will be padded with 0s
                    decimal_part_length = value_string.length - decimal_location - 1
            }
            
            // Calculate the number of decimal places that need to be padded with 0s
            var pad_total = decimal_places - decimal_part_length
            
            if (pad_total > 0) {
                    
                    // Pad the string with 0s
                    for (var counter = 1; counter <= pad_total; counter++) 
                            value_string += "0"
                    }
            return value_string
            }
  2. #2
  3. A Not To Shabby Code Smurf
    Devshed Beginner (1000 - 1499 posts)

    Join Date
    Aug 2008
    Posts
    1,158
    Rep Power
    184
    This should do it:

    Code:
    <script>
    function CalculateTotal(frm) {
            var order_total = 0
    
    
            // Run through all the form fields
            for (var i=0; i < frm.elements.length; ++i) {
    
    
                    // Get the current field
                    form_field = frm.elements[i]
    
    
                    // Get the field's name
                    form_name = form_field.name
    
    
                    // Is it a "product" field?
                    if (form_name.substring(0,4) == "PROD") {
    
    
                            // If so, extract the price from the name
                            item_price = parseFloat(form_name.substring(form_name.lastIndexOf("_") + 1))
    
    
                            // Get the quantity
                            if(form_field.type == 'checkbox') {
                                    item_quantity = form_field.checked;
                            } else {
                                    item_quantity = parseInt(form_field.value);                
                            }
    
    
                            // Update the order total
                            if (item_quantity >= 0) {
                                    order_total += item_quantity * item_price
                    
                     
    
    
                            }
                    }
            }
    
    
            // Display the total rounded to two decimal places
            frm.TOTAL.value = round_decimals(order_total, 2)
            }
    
    
            function round_decimals(original_number, decimals) {
            var result1 = original_number * Math.pow(10, decimals)
            var result2 = Math.round(result1)
            var result3 = result2 / Math.pow(10, decimals)
            return pad_with_zeros(result3, decimals)
             }
    
    
            function pad_with_zeros(rounded_value, decimal_places) {
    
    
            // Convert the number to a string
            var value_string = rounded_value.toString();
            
            // Locate the decimal point
            var decimal_location = value_string.indexOf(".");
    
    
            // Is there a decimal point?
            if (decimal_location == -1) {
                    
                    // If no, then all decimal places will be padded with 0s
                    decimal_part_length = 0;
                    
                    // If decimal_places is greater than zero, tack on a decimal point
                    value_string += decimal_places > 0 ? "." : "";
            }
            else {
    
    
                    // If yes, then only the extra decimal places will be padded with 0s
                    decimal_part_length = value_string.length - decimal_location - 1;
            }
            
            // Calculate the number of decimal places that need to be padded with 0s
            var pad_total = decimal_places - decimal_part_length;
            
            if (pad_total > 0) {
                    
                    // Pad the string with 0s
                    for (var counter = 1; counter <= pad_total; counter++) 
                            value_string += "0";
                    }
    
            document.checkbox.HALF_TOTAL.value = rounded_value / 2;
            var half = document.checkbox.HALF_TOTAL.value.toString().indexOf(".");
            if (half != -1) {
             document.checkbox.HALF_TOTAL.value = document.checkbox.HALF_TOTAL.value += "0";
            }
            else {
             document.checkbox.HALF_TOTAL.value = rounded_value / 2 + ".00";
            }
            return value_string;
            }
    </script>
    
    <form name="checkbox">
            
            One Page<input type="checkbox" name="PROD_CH_70.00" value="70" onchange="CalculateTotal(this.form)">
            <br>
            Two Pages<input type="checkbox" name="PROD_CH_140.00" value="140" onchange="CalculateTotal(this.form)">
            <br>
            Three Pages(Bronze Package)<input type="checkbox" name="PROD_CH_179.00" value="179" onchange="CalculateTotal(this.form)">
            <br>
            Six Pages(Silver Package)<input type="checkbox" name="PROD_CH_339.00" value="339" onchange="CalculateTotal(this.form)">
            <br>
            Ten Pages(Gold Package)<input type="checkbox" name="PROD_CH_549.00" value="549" onchange="CalculateTotal(this.form)">
            <br>
            New Business Start up<input type="checkbox" name="PROD_CH_289.00" value="289" onchange="CalculateTotal(this.form)">
            <br>
            Ecommerce Package<input type="checkbox" name="PROD_CH_449.00" value="449" onchange="CalculateTotal(this.form)">
            <br>
            SEO on all pages<input type="checkbox" name="PROD_CH_30.00" value="449" onchange="CalculateTotal(this.form)">
            <br>
            Logo Design<input type="checkbox" name="PROD_CH_25.00" value="25" onchange="CalculateTotal(this.form)">
            
     <!--<input type="text" name="PROD_DC_15" size="10" maxlength="3" onchange="CalculateTotal(this.form)">
    <input type="text" name="PROD_CC_20" size="10" maxlength="3" onchange="CalculateTotal(this.form)">-->
    <br><br>
    <span style="color: #FFFFFF;"><input type="text" name="TOTAL" size="10" onfocus="this.form.elements[0].focus()
    ">
    <input type="text" name="HALF_TOTAL" size="10" onfocus="this.form.elements[0].focus()
    ">  
    </span>
    </form>
  4. #3
  5. No Profile Picture
    Contributing User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Jun 2012
    Posts
    156
    Rep Power
    13
    Thank you

    Will try that later as got it working I think

    See the HTML coding below, is it ok

    Code:
    <form name="checkbox">
        
        One Page<input type="checkbox" name="PROD_CH_70.00" value="70" onChange="CalculateTotal(this.form)">
        <br>
        Two Pages<input type="checkbox" name="PROD_CH_140.00" value="140" onChange="CalculateTotal(this.form)">
        <br>
        Three Pages(Bronze Package)<input type="checkbox" name="PROD_CH_179.00" value="179" onChange="CalculateTotal(this.form)">
        <br>
        Six Pages(Silver Package)<input type="checkbox" name="PROD_CH_339.00" value="339" onChange="CalculateTotal(this.form)">
        <br>
        Ten Pages(Gold Package)<input type="checkbox" name="PROD_CH_549.00" value="549" onChange="CalculateTotal(this.form)">
        <br>
        New Business Start up<input type="checkbox" name="PROD_CH_289.00" value="289" onChange="CalculateTotal(this.form)">
        <br>
        Ecommerce Package<input type="checkbox" name="PROD_CH_449.00" value="449" onChange="CalculateTotal(this.form)">
        <br>
        SEO on all pages<input type="checkbox" name="PROD_CH_30.00" value="449" onChange="CalculateTotal(this.form)">
        <br>
        Logo Design<input type="checkbox" name="PROD_CH_25.00" value="25" onChange="CalculateTotal(this.form)">
        
     <!--<input type="text" name="PROD_DC_15" size="10" maxlength="3" onChange="CalculateTotal(this.form)">
    <input type="text" name="PROD_CC_20" size="10" maxlength="3" onChange="CalculateTotal(this.form)">-->
    <br><br>
    <span style="color: #FFFFFF;">TOTAL &#xA3;<input type="text" name="TOTAL" size="10" onFocus="this.form.elements[0].focus()
    ">  
    </span>
    <br><br>
    DEPOSIT TO PAY UPFRONT &#xA3;<input type="text" name="DEPOSIT" size="10" onFocus="this.form.elements[0].focus()">
    </form>
    Javascript coding is below

    Code:
    function CalculateTotal(frm) {
        var order_total = 0
    
        // Run through all the form fields
        for (var i=0; i < frm.elements.length; ++i) {
    
            // Get the current field
            form_field = frm.elements[i]
    
            // Get the field's name
            form_name = form_field.name
    
            // Is it a "product" field?
            if (form_name.substring(0,4) == "PROD") {
    
                // If so, extract the price from the name
                item_price = parseFloat(form_name.substring(form_name.lastIndexOf("_") + 1))
    
                // Get the quantity
                if(form_field.type == 'checkbox') {
                    item_quantity = form_field.checked;
                } else {
                    item_quantity = parseInt(form_field.value);           
                }
    
                // Update the order total
                if (item_quantity >= 0) {
                    order_total += item_quantity * item_price;
    
    				}
            }
        }
    
        // Display the total rounded to two decimal places
        frm.TOTAL.value = round_decimals(order_total, 2)
    		
    		// Display the total rounded to two decimal places
        frm.DEPOSIT.value = round_decimals(order_total / 2, 2)
        }
    
        function round_decimals(original_number, decimals) {
        var result1 = original_number * Math.pow(10, decimals)
        var result2 = Math.round(result1)
        var result3 = result2 / Math.pow(10, decimals)
        return pad_with_zeros(result3, decimals)
         }
    
        function pad_with_zeros(rounded_value, decimal_places) {
    
        // Convert the number to a string
        var value_string = rounded_value.toString()
        
        // Locate the decimal point
        var decimal_location = value_string.indexOf(".")
    
        // Is there a decimal point?
        if (decimal_location == -1) {
            
            // If no, then all decimal places will be padded with 0s
            decimal_part_length = 0
            
            // If decimal_places is greater than zero, tack on a decimal point
            value_string += decimal_places > 0 ? "." : ""
        }
        else {
    
            // If yes, then only the extra decimal places will be padded with 0s
            decimal_part_length = value_string.length - decimal_location - 1
        }
        
        // Calculate the number of decimal places that need to be padded with 0s
        var pad_total = decimal_places - decimal_part_length
        
        if (pad_total > 0) {
            
            // Pad the string with 0s
            for (var counter = 1; counter <= pad_total; counter++) 
                value_string += "0"
            }
        return value_string
        }

IMN logo majestic logo threadwatch logo seochat tools logo