Solved

# Round parseFloat number value to two deciml points

Posted on 2003-12-08
11,518 Views
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
0
Question by:lance22

LVL 31

Expert Comment

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

0

LVL 31

Expert Comment

ID: 9900676
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>
0

LVL 31

Expert Comment

ID: 9900699

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();
}
0

LVL 25

Expert Comment

ID: 9900819
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);
}
0

LVL 31

Accepted Solution

GwynforWeb earned 250 total points
ID: 9900822
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)
}

0

LVL 31

Expert Comment

ID: 9900868
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)
}
0

LVL 1

Expert Comment

ID: 9901563
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.
0

LVL 31

Expert Comment

ID: 9901586
Thats what I just said
0

LVL 1

Expert Comment

ID: 9901620
I was just providing an OO solution. A concept sadly lost on many people.
0

LVL 31

Expert Comment

ID: 9901768
OO can not be implemeneted blindly without attention to the specifics of the problem. There are a number of type converison problems here
0

LVL 1

Expert Comment

ID: 9901779
>> 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?
0

LVL 31

Expert Comment

ID: 9901838
What error?

ps

Math.round(1255.658334973432) = 1256  not 1255

so the output would be

1256 / 100 = 12.56
0

LVL 16

Expert Comment

ID: 9901901

You are hurting my ears
0

LVL 31

Expert Comment

ID: 9901912
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)
}
0

LVL 1

Expert Comment

ID: 9901965
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. :)
0

LVL 1

Expert Comment

ID: 9902001
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).
0

LVL 12

Expert Comment

ID: 9903489
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

the toFixed function is in Javascript 1.5
0

Author Comment

ID: 9905407
I appreciate everyone's help very much.  My wife had suggested .toFixed but this stuff will be used by people with OLD computers.  Thank you.
0

Expert Comment

ID: 10208380
the solution of regular expression doesn't work for decimal ranging between 0 and 1
0

## Featured Post

This article describes a JavaScript program that creates a maze made of hexagonal cells.  In Part 2 (http://www.experts-exchange.com/Programming/Languages/Scripting/JavaScript/A_7850-Hex-Maze-Part-2.html), we'll extend the program by adding a depth-â€¦
JavaScript can be used in a browser to change parts of a webpage dynamically. It begins with the following pattern: If condition W is true, do thing X to target Y after event Z. Below are some tips and tricks to help you get started with JavaScript â€¦
The viewer will learn the basics of jQuery, including how to invoke it on a web page. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery.: (CODE)
The viewer will learn the basics of jQuery including how to code hide show and toggles. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQueryâ€¦