玩转千位分隔符输出

1、Python

1.1 format方法:

2.7版本以上直接用format设置千分位分隔符

Python 2.7 (r27:82500, Nov 23 2010, 18:07:12)

[GCC 4.1.2 20070115 (prerelease) (SUSE Linux)] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> format(1234567890,',')

'1,234,567,890'

>>> print 'The value is {:0,.2f}'.format(1234567.125)
The value is 1,234,567.12
>>> print 'The value is {:0,.2f}'.format(1234567.126)
The value is 1,234,567.13

1.2 正则实现:

import re

def strConv(s):  

    s =  str(s)

    while True:

        (s,count) = re.subn(r"(\d)(\d{3})((:?,\d\d\d)*)$",r"\1,\2\3",s)

        if count == 0 : break

    return s

print strConv(12345)

1.3 locale

def number_format(num, places=0):

    """Format a number according to locality and given places"""

    locale.setlocale(locale.LC_ALL, "")

    return locale.format("%.*f", (places, num), True)

>>> import locale

>>> number_format(12345678.123)

'12,345,678'

>>> number_format(12345678.123, 2)

'12,345,678.12'



>>> import locale

>>> a = {'size': 123456789, 'unit': 'bytes'}

>>> print(locale.format("%(size).2f", a, 1))

123456789.00

>>> locale.setlocale(locale.LC_ALL, '') # Set the locale for your system

'en_US.UTF-8'

>>> print(locale.format("%(size).2f", a, 1))

123,456,789.00

1.4 DIY

>>> s = "1234567890"

>>> s = s[::-1]

>>> a = [s[i:i+3] for i in range(0,len(s),3)]

>>> print (",".join(a))[::-1]

2、Perl

perl -e '$size = "1234567890";while($size =~ s/(\d)(\d{3})((:?,\d\d\d)*)$/$1,$2$3/){};print $size, "\n";'

1,234,567,890

3、Sed

echo 12345|sed -e :a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta'

12,345

4、Bash

printf "%'d\n" 12345

12,345

5、JavaScript

5.1 Number.prototype.toLocaleString()  方法

parseInt('123456789456.34').toLocaleString()

"123,456,789,456"

5.2 Intl object 

Intl.NumberFormat().format(1234.1235);

"1,234.124"

5.3 正则

function addCommas(n){

    var rx=  /(\d+)(\d{3})/;

    return String(n).replace(/^\d+/, function(w){

        while(rx.test(w)){

            w= w.replace(rx, '$1,$2');

        }

        return w;

    });

}

addCommas('123456789456.34');

"123,456,789,456.34"



'12345678.34'.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")

"12,345,678.34"

注:某些方法不支持小数部分或者小数部分四舍五入,请慎用。

6、Refer:

[1] shell、perl、python 千分位 逗号分隔符输出

http://wenzhang.baidu.com/page/view?key=4f73729cefd8af8c-1426633956

[2] How do I add a thousand seperator to a number in JavaScript? [duplicate]

http://stackoverflow.com/questions/9743038/how-do-i-add-a-thousand-seperator-to-a-number-in-javascript

[3] How to print a number with commas as thousands separators in JavaScript

http://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏算法修养

CodeForces 651 C Watchmen

C. Watchmen time limit per test 3 seconds memory limit per test 256 megaby...

2743
来自专栏算法channel

用Word排版伪代码out了,推荐这个工具

多少次你看到别人的的伪代码排版如此完美而惊艳,心中不免好奇,怎么设计的?今天,和大家一起学习一款流行的排版利器:CTeX

1.3K0
来自专栏Golang语言社区

GoLang语言--的函数运用

首先要学习一下go 语言的变量定义等等 我把代码copy一下 package mainimport ("fmt") type Books struct{ ...

3649
来自专栏HansBug's Lab

3399: [Usaco2009 Mar]Sand Castle城堡

3399: [Usaco2009 Mar]Sand Castle城堡 Time Limit: 3 Sec  Memory Limit: 128 MB Subm...

2064
来自专栏Jerry的SAP技术分享

使用com.sun.imageio.plugins.png.PNGMetadata读取图片的元数据

所谓图片元数据,就是除了我们肉眼看到的图片内容外,隐藏在这些内容背后的一些技术数据。

1594
来自专栏雨过天晴

转 GO json解码和编码

1964
来自专栏HansBug's Lab

2102: [Usaco2010 Dec]The Trough Game

2102: [Usaco2010 Dec]The Trough Game Time Limit: 10 Sec  Memory Limit: 64 MB Sub...

3787
来自专栏cmazxiaoma的架构师之路

你真的了解Spring MVC处理请求流程吗?

3424
来自专栏Hongten

python开发_calendar

如果你用过linux,你可能知道在linux下面的有一个强大的calendar功能,即日历

1322
来自专栏个人分享

hdfs文件按修改时间下载

应用于:对于不同用户创建的表目录,进行文件的下载,程序中执行hadoop cat命令 下载文件到本地,随后通过ftp传至目标服务器,并将hdfs文件目录的修改时...

3702

扫码关注云+社区

领取腾讯云代金券