cari

Rumah  >  Soal Jawab  >  teks badan

jquery - javascript中如何将长数字格式化,如"10000"变成"10,000"或"10 000"

在做一个和金融有关的系统,里面牵涉到金额数字这些东西,希望能在格式化后更适合阅读。

巴扎黑巴扎黑2833 hari yang lalu2029

membalas semua(5)saya akan balas

  • 大家讲道理

    大家讲道理2017-04-10 12:44:18

    javascript数字格式化通用类——accounting.js使用:http://www.ithr.org.cn/blogs/blog1.ph...

    分享5个javascript的数字格式化函数:http://www.ithr.org.cn/blogs/blog1.ph...

    balas
    0
  • PHP中文网

    PHP中文网2017-04-10 12:44:18

    答案更新:
    今天看到有人赞了这个答案,老问题还有人在看也是受宠若惊,就更新下答案吧。
    最近这些日子我也碰到了相关的问题,发现其实自带的 Number 就能帮助我们解决这个问题。使用

    1

    <code>(10000).toLocaleString('en-US');</code>

    就可以帮我们按照三位数加上逗号,如果使用

    1

    <code>(10000).toLocaleString('en-US', {style: 'currency', currency: 'USD'});</code>

    还可以帮我们加上 $ 前缀,简单方便。
    更多使用方法可以参考 https://developer.mozilla.org... ,另外这个 IE11 才支持哦~


    我是老答案

    PHP里头有number_format函数可以对数字进行格式化,然后我找了一个JS版的number_format函数,感觉还不错。
    但是我觉得这个太强大了,只是要加个逗号什么的没必要,就自己写了一个。JS新手,用PHP的思路写的JS,可能不是最好的,不过确定是可以用的,希望能帮到你。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    <code>function number_format(num, format) {

            if(num.length <= 3) return num;

            if (num.length % 3 == 0) {

                    count = num.length/3;

            }else{

                    count = (num.length-num.length%3)/3;

            }

            var text = '';

            for(i=0;i<count;i++) {

                    if((count-i-1)*3+num.length%3!=0) {

                            text=format+num.slice((count-i-1)*3+num.length%3,(count-i-1)*3+num.length%3+3)+text;

                    }else {

                            text=num.slice((count-i-1)*3+num.length%3,(count-i-1)*3+num.length%3+3)+text;

                    }

            }

            return num.slice(0,num.length % 3)+text;

    }

    </code>

    balas
    0
  • 黄舟

    黄舟2017-04-10 12:44:18

    在不少地方看过这个问题,没有看到特别满意的答案。
    主要原因:

    • 我不希望因为一个函数去引入一个js文件
    • 没有考虑特殊的数字,比如.5, 5.
    • 没有考虑小数点
    • 没有考虑可能传入非法数值
    • 不够简洁

    在此分享一下我的答案,全当抛砖引玉,不足的地方欢迎指正。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    <code class="lang-javascript">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;

    }

    </code>

    测试:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    <code>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

    </code>

    balas
    0
  • 迷茫

    迷茫2017-04-10 12:44:18

    http://ntt.cc/2008/04/25/6-very-basic...

    balas
    0
  • PHP中文网

    PHP中文网2017-04-10 12:44:18

    用正则表达式匹配

    比如:

    1

    result = "1234567890".replace(/\d+?(?=(?:\d{3})+$)/img, "$& ");

    balas
    0
  • Batalbalas