JS实现数字千位符格式化方法

/**
 *
 * @param num
 * @param precision
 * @param separator
 * @returns {*}
 *=======================================================
 *     formatNumber(10000)="10,000"
 *     formatNumber(10000, 2)="10,000.00"
 *     formatNumber(10000.123456, 2)="10,000.12"
 *     formatNumber(10000.123456, 2, ‘ ‘)="10 000.12"
 *     formatNumber(.123456, 2, ‘ ‘)="0.12"
 *     formatNumber(56., 2, ‘ ‘)="56.00"
 *     formatNumber(56., 0, ‘ ‘)="56"
 *     formatNumber(‘56.‘)="56"
 *     formatNumber(‘56.a‘)=NaN
 *=======================================================
 */
function formatNumber(num, precision, separator) {
    var parts;
    // 判断是否为数字
    if (!isNaN(parseFloat(num)) && isFinite(num)) {
        // 把类似 .5, 5. 之类的数据转化成0.5, 5, 为数据精度处理做准, 至于为什么
        // 不在判断中直接写 if (!isNaN(num = parseFloat(num)) && isFinite(num))
        // 是因为parseFloat有一个奇怪的精度问题, 比如 parseFloat(12312312.1234567119)
        // 的值变成了 12312312.123456713
        num = Number(num);
        // 处理小数点位数
        num = (typeof precision !== ‘undefined‘ ? num.toFixed(precision) : num).toString();
        // 分离数字的小数部分和整数部分
        parts = num.split(‘.‘);
        // 整数部分加[separator]分隔, 借用一个著名的正则表达式
        parts[0] = parts[0].toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, ‘$1‘ + (separator || ‘,‘));

        return parts.join(‘.‘);
    }
    return NaN;
}

/**
 * 把数字转换成货币的格式
 * @param decimals
 * @param dec_point
 * @param thousands_sep
 * @returns {string}
 */
Number.prototype.format=function(decimals, dec_point, thousands_sep){
    var num = (this + ‘‘)
        .replace(/[^0-9+\-Ee.]/g, ‘‘);
    var n = !isFinite(+num) ? 0 : +num,
        prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
        sep = (typeof thousands_sep === ‘undefined‘) ? ‘,‘ : thousands_sep,
        dec = (typeof dec_point === ‘undefined‘) ? ‘.‘ : dec_point,
        s = ‘‘,
        toFixedFix = function(n, prec) {
            var k = Math.pow(10, prec);
            return ‘‘ + (Math.round(n * k) / k)
                    .toFixed(prec);
        };
    // Fix for IE parseFloat(0.55).toFixed(0) = 0;
    s = (prec ? toFixedFix(n, prec) : ‘‘ + Math.round(n))
        .split(‘.‘);
    if (s[0].length > 3) {
        s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
    }
    if ((s[1] || ‘‘)
            .length < prec) {
        s[1] = s[1] || ‘‘;
        s[1] += new Array(prec - s[1].length + 1)
            .join(‘0‘);
    }
    return s.join(dec);
}
时间: 2024-10-12 20:56:47

JS实现数字千位符格式化方法的相关文章

对Textbox的值转换为带千位符和小数的Decimal字符串

以下Function可以用于textbox的KeyUp事件: var numberChars = "1234567890"; function isDecimal(item) { var obj = $(item); if (obj.length > 0) { if ($(obj).val() != null && typeof ($(obj).val()) != "undefined") { var str = $(obj).val().to

JS 正则中环视(断言)应用 -- 数字千分符

介绍一下顺序环视 (?=...) 和逆序环视 (?<=...) 方便不想看长文的人,如果在支持 ES2018 的环境中整数可以这样使用: String(12345678).replace(/(?<=\d)(?=(\d{3})+\b)/g, ',') // "12,345,678" 其中最关键的是肯定顺序环视(?=...),也叫零宽度正预测先行断言.添加千分符麻烦的地方在于只有在从右到左 3 的倍数的位数和前面的数字中间需要添加逗号而正则是从左到右匹配的,这时候就需要用到顺序

Javascript 利用正则表达式实现数字千位分隔符

最近在网上有看到使用js来实现数字的千位分隔符的面试(笔试)题,所以就自己写了一个利用“正则+replace”来实现的方法:    1 var thousandBitSeparator = function(numStr){ 2 var b = /([-+]?\d{3})(?=\d)/g; 3 4 return numStr.replace(b, function($0, $1){ 5 return $1 + ','; 6 }); 7 } 支持正负号匹配,小数点区分,如有错误,希望大大们指出:-

JS自动格式化输入的数字/千位分隔符

<script> function cc(s){ if(/[^0-9\.]/.test(s)) return "invalid value"; s=s.replace(/^(\d*)$/,"$1."); s=(s+"00").replace(/(\d*\.\d\d)\d*/,"$1"); s=s.replace(".",","); var re=/(\d)(\d{3},)/;

js中数字转换为字符串 几种方法

a. 要把一个数字转换为字符串,只要给它添加一个空的字符串即可: var n = 100; var n_as_string = n + ""; b. 要让数字更加显式地转换为字符串,可以使用String()函数:  var string_value = String(number); c. 使用toString()方法:  string_value = number.toString(); Number对象的(基本的数字转换为Number对象,以便可以调用这个方法)toString()

千位符

function format (num) { return (num.toFixed(2) + '').replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, '$&,'); } var num = 11231232345; alert(format(num)); 以上来自于网络,若要求删除请联系博主

使用DecimalFormat给String字符串加千位符,并保留2位小数

//包名 import java.text.DecimalFormat; import java.text.NumberFormat; import java.text.ParseException; public class DecimalFormatTest { public static void main(String[] args) { DecimalFormat df = new DecimalFormat("###,###.##"); NumberFormat nf =

金钱数字千分符

function initNumber(number) { number= (typeof number=='number') ? number.toString() : number; var len = number.length; var newnumber = ""; for (var i = 0; i < len; i++) { if ((i + 1) % 3 == 0) { newnumber += number.substr(0, 3) + ","

使用千位分隔符(逗号)表示web网页中的大数字

做手机端页面我们常常遇到数字,而在Safari浏览器下这些数字会默认显示电话号码,于是我们就用到了补坑的方法加入<meta>标签: <meta name="format-detection" content="telephone=no">这个标签的意义在于将数字不被看成电话号码,于是就万事大吉了O(∩_∩)O,但是如果是一个订餐电话,那么在加入这个标签之后,订餐电话就变成了数字,就不能直接拨号了于是乎我们想到了用千位符老表示数字从而区分电话号