42

Possible Duplicate:
How can I format numbers as money in JavaScript?

I have a form with some simple JavaScript to perform an instant calculation. My problem is that I'm struggling to format it to display correctly with commas and 2 decimal places.

Any help would be very much appreciated. Thank you.

    <p>
    <label>My Daily Rate is:</label><br />
<input class="poundsBox" name="shares" id="shares" type="text" /><br />
<br />
<strong>Your Gross Contract Take Home:</strong></p>
<p><span class="result">&pound; <span id="result"></span></span></p>
The above illustration is provided for guidance only. Please complete the request form below for a detailed personal illustration.

<script type="text/javascript">
$("#shares").keyup(function() {
   var val = parseFloat($(this).val());
   // If val is a good float, multiply by 260, else show an error
   val = (val ? val * 260 * 0.88 : "Invalid number");
   $("#result").text(val);
})
</script>
8
  • You should give a look that this library josscrowcroft.github.com/accounting.js Commented Jan 22, 2013 at 20:30
  • 2
    It's a bad idea to use fractional floating-point numbers to represent currency values. Commented Jan 22, 2013 at 20:30
  • @cdhowie So you expect the user to input an integer, representing cents, not dollars (pounds)? How else do you expect this to be done? Commented Jan 22, 2013 at 20:52
  • 1
    @Ian One would have to write a function that parses "123.45" into 12345, for example. This is not terribly difficult to do. Commented Jan 22, 2013 at 20:58
  • @cdhowie So what, return parseInt(parseFloat(input)*100);? Commented Jan 22, 2013 at 21:34

2 Answers 2

122

You can use standard JS toFixed method

var num = 5.56789;
var n=num.toFixed(2);

//5.57

In order to add commas (to separate 1000's) you can add regexp as follows (where num is a number):

num.toString().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,")

//100000 => 100,000
//8000 => 8,000
//1000000 => 1,000,000

Complete example:

var value = 1250.223;
var num = '$' + value.toFixed(2).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");

//document.write(num) would write value as follows: $1,250.22

Separation character depends on country and locale. For some countries it may need to be .

Sign up to request clarification or add additional context in comments.

4 Comments

Maybe the following regex is better: /(\d)(?=(\d{3})+$)/g.
another way is using value.toLocaleString() which parse the float to string based on locale.
I don't understand Regex much but how do you make it (12,23,988)
Can someone explain the regex? I had to do this in PHP using str_split, strrev, and join. I like how a tiny regex solves the problem.
2

You could use toPrecision() and toFixed() methods of Number type. Check this link How can I format numbers as money in JavaScript?

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.