how to accumulate a decimal total in jQuery / Javascript

 $('span[id*="lblAmt"]').each(function () {
            $(this).css(
               'border', 'solid 1px green'
            );

            tot += $(this).text();
        });


alert(tot);

Open in new window



I've established that it loops the appropriate number of times inside the each( ).


But the total in the ALERT is wacky.


Do I need to convert the text( ) to a decimal or something or other?


How can I accumlate values like this inside the each:

415.66
434
320.17
.17


Thank you.


Please provide working javascript.
LVL 5
Tom KnowltonWeb developerAsked:
Who is Participating?
 
leakim971Connect With a Mentor PluritechnicianCommented:
what about :
var tot = 0;
 $('span[id*="lblAmt"]').each(function () {
            $(this).css(
               'border', 'solid 1px green'
            );

            tot += $(this).text() * 1; // or tot += parseFloat( $(this).text() )
        });


alert(tot);

Open in new window

0
 
Tom KnowltonWeb developerAuthor Commented:
Yeah...it was parseFloat that I needed, I think!

  $('span[id*="lblAmt"]').each(function () {           
            tot += parseFloat($(this).text());
        });

Open in new window


alert(tot);
0
 
Tom KnowltonWeb developerAuthor Commented:
Thank you.
0
Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
Matthew KellyCommented:
Here is a test script that works with your example data of strings.

Essentially we use a variety of built in Javascript functions and we are sure to initialize tot to 0:
parseFloat: http://www.w3schools.com/jsref/jsref_parsefloat.asp
Math.Round: http://www.w3schools.com/jsref/jsref_round.asp

<script type="text/javascript">
//initialize tot to 0
var tot = 0;
// array of string values
var values=new Array("415.66","434","320.17",".17");
//loop through with parseFloat
for (var i=0;i<values.length;i++)
{ 
tot += parseFloat(values[i]);
}
// round to two decimal places
tot = Math.round(tot*100)/100;
//output tot, use .toFixed(2) if you want two decimal places to always show
alert(tot);
</script>

Open in new window


So for your code:

//initialize
var tot = 0;

$('span[id*="lblAmt"]').each(function () {
            $(this).css(
               'border', 'solid 1px green'
            );
            //parseFloat
            tot += parseFloat($(this).text());
        });

// round to two decimal places, use 1000 for 3 decimal places, etc. You must do this because of float values extreme decimal places.
tot = Math.round(tot*100)/100;

//output
alert(tot);

Open in new window

0
 
leakim971PluritechnicianCommented:
longer than * 1 but more explicit too...
0
 
Tom KnowltonWeb developerAuthor Commented:
matthewstevenkelly:


Thank you for this additional info!

Tom
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.