snipt

Ctrl+h for KB shortcuts

JavaScript

Format Number

/**
 * Format a number
 *
 * @param {Number} num        The number to format
 * @param {Number} precision  Precision
 * @param {String} decimal    Decimal place operator
 * @param {String} thousand   Thousand place operator
 * @returns {String} Formatted number
 */
function formatNumber(num, precision, decimal, thousand) {
    "use strict";

    var sign, intVal, remain, final;

    precision = isNaN(precision = Math.abs(precision)) ? 2 : precision;
    decimal = decimal === undefined ? "." : decimal;
    thousand = thousand === undefined ? "," : thousand;

    sign = num < 0 ? "-" : "";
    intVal = parseInt(num = Math.abs(+num || 0).toFixed(precision), 10) + "";
    remain = (remain = intVal.length) > 3 ? remain % 3 : 0;

	final = sign;

    //the "prefix" numbers, before the first thousand operator
    final += remain ? intVal.substr(0, remain) + thousand : ""; 

    //place thousand operators every 3rd char
    final += intVal.substr(remain).replace(/(\d{3})(?=\d)/g, "$1" + thousand); 

    // set the correct decimal place operator + precision
    final += precision ? decimal + Math.abs(num - intVal).toFixed(precision).slice(2) : ""; 
    
    return final; 
}
https://snipt.net/embed/c71f53bc67d3bc498fd8e00786626143/
/raw/c71f53bc67d3bc498fd8e00786626143/
c71f53bc67d3bc498fd8e00786626143
js
JavaScript
35
2019-07-16T10:14:07
True
False
False
Nov 07, 2012 at 03:38 PM
/api/public/snipt/49813/
format-number
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><a href="#L-1"> 1</a> <a href="#L-2"> 2</a> <a href="#L-3"> 3</a> <a href="#L-4"> 4</a> <a href="#L-5"> 5</a> <a href="#L-6"> 6</a> <a href="#L-7"> 7</a> <a href="#L-8"> 8</a> <a href="#L-9"> 9</a> <a href="#L-10">10</a> <a href="#L-11">11</a> <a href="#L-12">12</a> <a href="#L-13">13</a> <a href="#L-14">14</a> <a href="#L-15">15</a> <a href="#L-16">16</a> <a href="#L-17">17</a> <a href="#L-18">18</a> <a href="#L-19">19</a> <a href="#L-20">20</a> <a href="#L-21">21</a> <a href="#L-22">22</a> <a href="#L-23">23</a> <a href="#L-24">24</a> <a href="#L-25">25</a> <a href="#L-26">26</a> <a href="#L-27">27</a> <a href="#L-28">28</a> <a href="#L-29">29</a> <a href="#L-30">30</a> <a href="#L-31">31</a> <a href="#L-32">32</a> <a href="#L-33">33</a> <a href="#L-34">34</a> <a href="#L-35">35</a></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span id="L-1"><a name="L-1"></a><span class="cm">/**</span> </span><span id="L-2"><a name="L-2"></a><span class="cm"> * Format a number</span> </span><span id="L-3"><a name="L-3"></a><span class="cm"> *</span> </span><span id="L-4"><a name="L-4"></a><span class="cm"> * @param {Number} num The number to format</span> </span><span id="L-5"><a name="L-5"></a><span class="cm"> * @param {Number} precision Precision</span> </span><span id="L-6"><a name="L-6"></a><span class="cm"> * @param {String} decimal Decimal place operator</span> </span><span id="L-7"><a name="L-7"></a><span class="cm"> * @param {String} thousand Thousand place operator</span> </span><span id="L-8"><a name="L-8"></a><span class="cm"> * @returns {String} Formatted number</span> </span><span id="L-9"><a name="L-9"></a><span class="cm"> */</span> </span><span id="L-10"><a name="L-10"></a><span class="kd">function</span> <span class="nx">formatNumber</span><span class="p">(</span><span class="nx">num</span><span class="p">,</span> <span class="nx">precision</span><span class="p">,</span> <span class="nx">decimal</span><span class="p">,</span> <span class="nx">thousand</span><span class="p">)</span> <span class="p">{</span> </span><span id="L-11"><a name="L-11"></a> <span class="s2">&quot;use strict&quot;</span><span class="p">;</span> </span><span id="L-12"><a name="L-12"></a> </span><span id="L-13"><a name="L-13"></a> <span class="kd">var</span> <span class="nx">sign</span><span class="p">,</span> <span class="nx">intVal</span><span class="p">,</span> <span class="nx">remain</span><span class="p">,</span> <span class="kr">final</span><span class="p">;</span> </span><span id="L-14"><a name="L-14"></a> </span><span id="L-15"><a name="L-15"></a> <span class="nx">precision</span> <span class="o">=</span> <span class="nb">isNaN</span><span class="p">(</span><span class="nx">precision</span> <span class="o">=</span> <span class="nb">Math</span><span class="p">.</span><span class="nx">abs</span><span class="p">(</span><span class="nx">precision</span><span class="p">))</span> <span class="o">?</span> <span class="mi">2</span> <span class="o">:</span> <span class="nx">precision</span><span class="p">;</span> </span><span id="L-16"><a name="L-16"></a> <span class="nx">decimal</span> <span class="o">=</span> <span class="nx">decimal</span> <span class="o">===</span> <span class="kc">undefined</span> <span class="o">?</span> <span class="s2">&quot;.&quot;</span> <span class="o">:</span> <span class="nx">decimal</span><span class="p">;</span> </span><span id="L-17"><a name="L-17"></a> <span class="nx">thousand</span> <span class="o">=</span> <span class="nx">thousand</span> <span class="o">===</span> <span class="kc">undefined</span> <span class="o">?</span> <span class="s2">&quot;,&quot;</span> <span class="o">:</span> <span class="nx">thousand</span><span class="p">;</span> </span><span id="L-18"><a name="L-18"></a> </span><span id="L-19"><a name="L-19"></a> <span class="nx">sign</span> <span class="o">=</span> <span class="nx">num</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="o">?</span> <span class="s2">&quot;-&quot;</span> <span class="o">:</span> <span class="s2">&quot;&quot;</span><span class="p">;</span> </span><span id="L-20"><a name="L-20"></a> <span class="nx">intVal</span> <span class="o">=</span> <span class="nb">parseInt</span><span class="p">(</span><span class="nx">num</span> <span class="o">=</span> <span class="nb">Math</span><span class="p">.</span><span class="nx">abs</span><span class="p">(</span><span class="o">+</span><span class="nx">num</span> <span class="o">||</span> <span class="mi">0</span><span class="p">).</span><span class="nx">toFixed</span><span class="p">(</span><span class="nx">precision</span><span class="p">),</span> <span class="mi">10</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;&quot;</span><span class="p">;</span> </span><span id="L-21"><a name="L-21"></a> <span class="nx">remain</span> <span class="o">=</span> <span class="p">(</span><span class="nx">remain</span> <span class="o">=</span> <span class="nx">intVal</span><span class="p">.</span><span class="nx">length</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">3</span> <span class="o">?</span> <span class="nx">remain</span> <span class="o">%</span> <span class="mi">3</span> <span class="o">:</span> <span class="mi">0</span><span class="p">;</span> </span><span id="L-22"><a name="L-22"></a> </span><span id="L-23"><a name="L-23"></a> <span class="kr">final</span> <span class="o">=</span> <span class="nx">sign</span><span class="p">;</span> </span><span id="L-24"><a name="L-24"></a> </span><span id="L-25"><a name="L-25"></a> <span class="c1">//the &quot;prefix&quot; numbers, before the first thousand operator</span> </span><span id="L-26"><a name="L-26"></a> <span class="kr">final</span> <span class="o">+=</span> <span class="nx">remain</span> <span class="o">?</span> <span class="nx">intVal</span><span class="p">.</span><span class="nx">substr</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nx">remain</span><span class="p">)</span> <span class="o">+</span> <span class="nx">thousand</span> <span class="o">:</span> <span class="s2">&quot;&quot;</span><span class="p">;</span> </span><span id="L-27"><a name="L-27"></a> </span><span id="L-28"><a name="L-28"></a> <span class="c1">//place thousand operators every 3rd char</span> </span><span id="L-29"><a name="L-29"></a> <span class="kr">final</span> <span class="o">+=</span> <span class="nx">intVal</span><span class="p">.</span><span class="nx">substr</span><span class="p">(</span><span class="nx">remain</span><span class="p">).</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/(\d{3})(?=\d)/g</span><span class="p">,</span> <span class="s2">&quot;$1&quot;</span> <span class="o">+</span> <span class="nx">thousand</span><span class="p">);</span> </span><span id="L-30"><a name="L-30"></a> </span><span id="L-31"><a name="L-31"></a> <span class="c1">// set the correct decimal place operator + precision</span> </span><span id="L-32"><a name="L-32"></a> <span class="kr">final</span> <span class="o">+=</span> <span class="nx">precision</span> <span class="o">?</span> <span class="nx">decimal</span> <span class="o">+</span> <span class="nb">Math</span><span class="p">.</span><span class="nx">abs</span><span class="p">(</span><span class="nx">num</span> <span class="o">-</span> <span class="nx">intVal</span><span class="p">).</span><span class="nx">toFixed</span><span class="p">(</span><span class="nx">precision</span><span class="p">).</span><span class="nx">slice</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="o">:</span> <span class="s2">&quot;&quot;</span><span class="p">;</span> </span><span id="L-33"><a name="L-33"></a> </span><span id="L-34"><a name="L-34"></a> <span class="k">return</span> <span class="kr">final</span><span class="p">;</span> </span><span id="L-35"><a name="L-35"></a><span class="p">}</span> </span></pre></div> </td></tr></table>
"number format", format, javascript