formatting decimals

A simple example of QUnit tests using JSFiddle

by digitalzebra

HTML

<link rel="stylesheet" href="https://code.jquery.com/qunit/qunit-1.12.0.css">
<script src="https://code.jquery.com/qunit/qunit-1.12.0.js"></script>
  <div id="qunit"></div>
  <div id="qunit-fixture"></div>

JavaScript

// TODO: possibly could use MDN's decimal adjust here
function formatDecimal(num, places) {
	var intermediate = null;
  
  if (typeof(num) === 'string') {
  	num = parseFloat(num);
  }
  
	if (places === 0) {
  	// truncate decimals instead of doing any sort of rounding
    intermediate = Math[num < 0 ? 'ceil' : 'floor'](num).toString();
  }
  else {
  	intermediate = parseFloat(num.toFixed(places)).toString();
  }
  
  var parts = intermediate.split(".");
	parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
  return parts.join(".");
}

test("formatValueInGrid basic", function () {

	var formattedDecimal = formatDecimal(9000.568, 3);

	equal(formattedDecimal, '9,000.568');
});

test("formatValueInGrid rounding up", function () {

	var formattedDecimal = formatDecimal(9000.568, 2);

	equal(formattedDecimal, '9,000.57');
});

test("formatValueInGrid half rounding decimal away from zero", function () {

	var formattedDecimal = formatDecimal(9000.565, 2);

	equal(formattedDecimal, '9,000.57');
});

test("formatValueInGrid decimal rounding down", function () {

	var formattedDecimal = formatDecimal(9000.564, 2);

	equal(formattedDecimal, '9,000.56');
});

test("formatValueInGrid no zero extension", function () {

	var formattedDecimal = formatDecimal(9000.00, 2);

	equal(formattedDecimal, '9,000');
});

test("formatValueInGrid no defined decimal places goes to zero places", function () {

	// Purposefully not defining decimal places property here
	var formattedDecimal = formatDecimal(9000.15, 0);

	equal(formattedDecimal, '9,000');
});

test("formatValueInGrid no decimal places truncates instead of rounds", function () {

	// Purposefully not defining decimal places property here
	var formattedDecimal = formatDecimal(9000.85, 0)

	equal(formattedDecimal, '9,000');
});

test("formatValueInGrid decimal with no zero extension", function () {

	var formattedDecimal = formatDecimal(9000.15, 4);

	equal(formattedDecimal, '9,000.15');
});

test("formatValueInGrid...