# Round parseFloat number value to two deciml points

I have a function that does some math, and am using parseFloat.  The value it returns must be rounded to two decimal places.  I have tried Math.Round(value) but it returns nothing.  Is this because math.round does not work with parseFloat?  The script uses two fields, and is as follows:

function totalFields()
{
myTotal1 = document.myForm.before.value;
myTotal2 = document.myForm.after.value;
myBigTotal = [(parseFloat(myTotal1)-parseFloat(myTotal2))*100]/parseFloat(myTotal1);
return(myBigTotal)
}
{
document.myForm.grandtotal.value=totalFields();
}

How can I convert the value to something recognized by math.round(value), or is there another way of converting this to two decimal points?  A test value could be 12.55658334973432

lance22
JavaScript Noob
###### Who is Participating?

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Commented:
<script>
num='234.123453'
str=new String()
str=num
str=str.match(/^\d*\.\d{2}/)
</script>

Commented:
or

<script>
function convert(str){
str=str.match(/^\d*\.\d{2}/)
return str
}
</script>

<<form>
<p><input type="text" name="t1">
<input type="button" value="convert" onclick="t1.value=convert(t1.value)"> </p>
</form>
Commented:

function totalFields()
{
myTotal1 = document.myForm.before.value;
myTotal2 = document.myForm.after.value;
myBigTotal = [(parseFloat(myTotal1)-parseFloat(myTotal2))*100]/parseFloat(myTotal1);

myBigTotal=myBigTotal+' '
myBigTotal=myBigTotal.match(/^\d*\.\d{2}/)
return(myBigTotal)
}
{
document.myForm.grandtotal.value=totalFields();
}
Commented:
hi lance22,

try this:
=======================
function totalFields()
{
myTotal1 = document.myForm.before.value*1;
myTotal2 = document.myForm.after.value*1;
return Math.round(((myTotal1-myTotal2)*100)/myTotal1);
}
Commented:
oops that truncates

<script>
function convert(str){
str=str.match(/^\d*\.\d{3}/)*100
str=Math.round(str)/100
return str
}
</script>

<form>
<p><input type="text" name="t1">
<input type="button" value="convert" onclick="t1.value=convert(t1.value)"> </p>
</form>

function totalFields()
{
myTotal1 = document.myForm.before.value;
myTotal2 = document.myForm.after.value;
myBigTotal = [(parseFloat(myTotal1)-parseFloat(myTotal2))*100]/parseFloat(myTotal1);

myBigTotal=myBigTotal+' '
myBigTotal=myBigTotal.match(/^\d*\.\d{3}/)*100
myBigTotal=Math.round(myBigTotal)/100
return(myBigTotal)
}

Experts Exchange Solution brought to you by

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Commented:
After all that I think this is probably the most natural no ned for parseFloat, multiplying  a string variable returns a number so you can rearrange the expression to return the correct number

function totalFields()
{
myTotal1 = document.myForm.before.value;
myTotal2 = document.myForm.after.value;
myBigTotal = (myTotal1*100-myTotal2*100)/myTotal1;
myBigTotal=Math.round(100*myBigTotal)/100
return(myBigTotal)
}
Commented:
Nice and simple, just use this in place of Math.round;

function roundFloat(fltValue) {
return Math.round(fltValue * 100) / 100;
}

fltValue = 12.55658334973432
12.55658334973432 * 100 = 1255.658334973432
Math.round(1255.658334973432) = 1255
1255 / 100 = 12.55

So the function would output 12.55.
Commented:
Thats what I just said
Commented:
I was just providing an OO solution. A concept sadly lost on many people.
Commented:
OO can not be implemeneted blindly without attention to the specifics of the problem. There are a number of type converison problems here
Commented:
>> OO can not be implemeneted blindly without attention to the specifics of the problem.

I hardly think this is a blind implementation.

>> There are a number of type converison problems here

Including the error in your solution?
Commented:
What error?

ps

Math.round(1255.658334973432) = 1256  not 1255

so the output would be

1256 / 100 = 12.56
Commented:

You are hurting my ears
Commented:
I agree.  Just in case my proposed solution does not get lost in the above I suggest changing totalFields() to

function totalFields()
{
myTotal1 = document.myForm.before.value;
myTotal2 = document.myForm.after.value;
myBigTotal = (myTotal1*100-myTotal2*100)/myTotal1;
myBigTotal=Math.round(100*myBigTotal)/100
return(myBigTotal)
}
Commented:
ps

Math.round(1255.658334973432) = 1256  not 1255

so the output would be

1256 / 100 = 12.56

-- Ah thanks dude, damn hope my code doesn't do that. :)
Commented:
Heres another nice little example in the spirit of OO design;

function roundFloat(fltValue, intDecimal) {
return Math.round(fltValue * Math.pow(10, intDecimal)) / Math.pow(10, intDecimal)
}

Not quite as simple as the other examples but this one lets you round to any number of decimal places. :) Just specify the number to be rounded (fltValue) and the number of decimal places (intDecimal).
Finance Systems DeveloperCommented:
lance22,
Not trying to clutter the thread, but after taking advice from the above comments which are needed for compatibility with older browsers, you can also make note of a built-in function that works on newer browsers:
var myNumber=1.222367;//example