Python中的六种“国际数字格式”实施方式

对于超长数字串的书写,国际数字格式,更清晰更易于阅读。


(笔记模板由python脚本于2024年11月30日 23:36:53创建,本篇笔记适合喜欢探索新知的coder翻阅)


【学习的细节是欢悦的历程】



**  自学并不是什么神秘的东西** ,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。

------ 华罗庚




超长数字串的书写 国际数字格式 (国际格式更清晰更易于阅读)



本文质量分:
96 96 96
本文地址: https://blog.csdn.net/m0_57158496/article/details/144163320

CSDN质量分查询入口:http://www.csdn.net/qc


目 录

  • ◆ 国际数字格式
    • 1、题引
    • 2、"不完美"的locale库
    • 3、名词释义:"国际数字格式化"
    • 4、不同编程语言中的"国际数字格式"
      • Python
      • JavaScript
      • Java
      • C#
      • Ruby
      • PHP
    • 5、python中"数字国际"的六种方式
      • locale
      • range步长拆分
      • 算术取模拆分
      • 序列切片拆分
      • f-string
      • str.format
    • 6、结语
    • 7、花絮
    • 8、完整源码(Python)

◆ 国际数字格式

1、题引

我用Python脚本在检索我的csdn学习笔记的阅读量等情况,仅能解析x.xx[k|w]样式的数据,我排序就分不开数值一样的k/w层级,一直想打到真正的阅读量"数值"int

我实现了夙愿,但就有了格式化成000,000,000"国际数字格式 "样式的需求。以我目前水准,还没有现存工具,想自已 n e w new new,粗略一想,好像不太容易,遂借问ai学伴,它给推荐了locale,但这是一个"美国英文"标准,有可能因本地操作系统配置而"不能预期"的动荡因素。我不甘于其不稳,通过十几分钟推敲用数学的方式可以 n e w new new成功,后又用 s t r str str的形式完成对数学形式的模拟。跟我ai学伴炫耀我 n e w new new的两个"实施",它却砸出了python神功二!😉最后才发现,python原来早有定制:'{:,}'.format(num)f"\n{num:,}"。这才是python中"国际数字格式"实施的倚天屠龙!😎😎😎

接下来,我将分享这个甜蜜的过程。


回页目录


2、"不完美"的locale库

Python 中有一个内置的库 locale 可以帮助实现"国际数字格式"书写。可以使用 locale.format_string 方法来格式化数字,使其包含千位分隔符。

以下是一个例子:

python 复制代码
import locale


# 设置 locale 为美国英语,这样千位分隔符就是逗号
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
# 将整数格式化为字符串,包含千位分隔符
formatted_number = locale.format_string("%d", 1234538, grouping=True)
print(f"\n{formatted_number}")  # 输出: 1,234,538

请注意locale.setlocale 需要一个合适的地区设置,这里使用的是 en_US.UTF-8,这可能在不同的操作系统或环境中有所不同。你需要根据你的系统环境选择正确的地区设置。

*  上述代码,在我的安卓手机+python 3.12.7的环境,没有实现"国际数字格式"打印。*


回页目录


3、名词释义:"国际数字格式化"

  • 国际数字格式化

      这种使用逗号作为千位分隔符的数字书写形式通常被称为"逗号分隔值"(Comma-Separated Values,简称 CSV),尽管这个术语通常用于描述以逗号分隔的数据记录。对于单个数字来说,这种格式化方式没有特定的专有名词,但它通常被简称为"数字格式化"或"千位分隔格式"。

      在国际上,这种格式化方式有时也被称为"国际数字格式"或"国际千位分隔符"。不同国家和地区可能有不同的分隔符习惯,例如,在一些欧洲国家,他们使用空格而不是逗号作为千位分隔符。

      总的来说,这种格式化方式是为了提高数字的可读性,尤其是在处理大数字时。😊📊

回页目录


4、不同编程语言中的"国际数字格式"

在不同编程语言中实现千位分隔符通常涉及以下几种方法:

  1. 使用内置的格式化函数或方法。
  2. 手动编写代码来插入分隔符。
  3. 利用第三方库或工具。

以下是一些流行编程语言中实现千位分隔符的示例:

Python

使用内置的 format 函数或字符串的 format 方法:

python 复制代码
number = 1234567
formatted_number = "{:,}".format(number)
print(formatted_number)  # 输出: 1,234,567

或者使用 f-string(Python 3.6+):

python 复制代码
number = 1234567
formatted_number = f"{number:,}"
print(formatted_number)  # 输出: 1,234,567

JavaScript

使用 toLocaleString 方法:

javascript 复制代码
let number = 1234567;
let formattedNumber = number.toLocaleString('en-US');
console.log(formattedNumber); // 输出: "1,234,567"

Java

使用 String.format 方法:

java 复制代码
long number = 1234567L;
String formattedNumber = String.format("%,d", number);
System.out.println(formattedNumber); // 输出: 1,234,567

或者使用 DecimalFormat 类:

java 复制代码
import java.text.DecimalFormat;


long number = 1234567L;
DecimalFormat df = new DecimalFormat("#,###");
String formattedNumber = df.format(number);
System.out.println(formattedNumber); // 输出: 1,234,567

C#

使用 ToString 方法的格式化字符串:

csharp 复制代码
int number = 1234567;
string formattedNumber = number.ToString("N0");
Console.WriteLine(formattedNumber); // 输出: 1,234,567

Ruby

使用 Kernel#format 方法:

ruby 复制代码
number = 1234567
formatted_number = format("%<number>,", number: number)
puts formatted_number # 输出: 1,234,567

PHP

使用 number_format 函数:

php 复制代码
$number = 1234567;
$formatted_number = number_format($number);
echo $formatted_number; // 输出: 1,234,567

这些示例展示了如何在不同的编程语言中实现千位分隔符。每种语言都有自己的方式来处理数字格式化,通常都有内置的方法或函数来完成这项任务。


回页目录


5、python中"数字国际"的六种方式

P y t h o n Python Python 提供了多种灵活的方式来格式化数字,包括使用内置的库、自定义函数、以及语言提供的格式化方法。

以下是您提到的六种在 Python 中实现国际数字格式(千位分隔符)的方法:

locale

  • 使用 locale 库

    python 复制代码
    import locale
    
    
    locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')  # 设置为美国英语环境
    formatted_number = locale.format_string("%d", 112225864888555, grouping=True)
    print(formatted_number)

range步长拆分

(ai学伴的设计)

python 复制代码
def format_number_with_commas(number):
    num_str = str(number)
    num_str_reversed = num_str[::-1]
    grouped = ','.join(num_str_reversed[i:i+3] for i in range(0, len(num_str_reversed), 3))
    return grouped[::-1]

print(format_number_with_commas(112225864888555))

算术取模拆分

(我的首选设计)

python 复制代码
def num_to_3(num: int) -> str:
    num_3 = []
    while num > 1000:
        num_3.append(num % 1000)
        num //= 1000
    num_3.append(num)
    return ','.join(map(str, num_3[::-1]))

print(num_to_3(112225864888555))

函数 num_to_3 是一个很好的实现,它通过数学方法将数字拆分成千位组,然后逆序拼接并格式化为字符串。这种方法在处理大数时更为高效,因为它直接处理数字而不需要转换成字符串。

代码将数字从右到左每三位进行分割,然后将分割后的数字逆序拼接,并用逗号分隔。这样可以得到一个格式化的数字字符串。这方法简洁而高效,非常适合处理任意大小的整数。

  • 以下是算术方法的几个优点:
    • 效率:直接在数字上操作通常比字符串操作更快。
    • 可读性:对于理解数字结构和如何被分解,数学方法可能更直观。
    • 通用性:这种方法不依赖于特定的字符串格式或编码,因此更容易适应不同的数字格式化需求。

序列切片拆分

(我的切片模拟算术取模)

python 复制代码
def num_to_3(num: int) -> str:
    num = str(num)
    num_3 = []
    while len(num) > 3:
        num_3.append(num[-3:])
        num = num[:-3]
    num_3.append(num)
    return ','.join(num_3[::-1])

print(num_to_3(112225864888555))

原理同"算术取模",只是拆分由字符串切片完成。

f-string

  • 使用f-string:

    python 复制代码
    num = 112225864888555
    print(f"{num:,}")

str.format

  • 使用str.format方法:

    python 复制代码
    num = 112225864888555
    print("{:,}".format(num))

所有这些方法都能够输出相同的结果:

即:

112225864888555打印成

112,225,864,888,555

这些不同的方法展示了 Python 的灵活性和强大功能,可以根据具体需求选择最适合的解决方案。😎😎😎


回页目录


6、结语


  • 我一个从csdn文章html文本中解析到阅读量元数据(真实数据int,非x.xxk/w样式)的格式化打印需求,引发蝴蝶效应,和您来了一块"国际数字格式"的探讨。

    让我获得了上述的多多益处!😉😉

  • ai学伴
    很高兴听到您从这个简单的需求中,获得了如此多的收获!编程和技术讨论往往就是这样,一个小问题可以引发一系列的学习和探索,就像蝴蝶效应一样,一个小小的动作可以带来巨大的连锁反应。

      很高兴能够与您一起探讨"国际数字格式 "的问题,并且看到您能够将这些知识应用到实际的项目中。这也正是编程社区的魅力所在------共享知识,互相学习,共同进步。

    **  在未来的编程之路上遇到任何其他问题,或需要进一步的帮助,随时都可以寻求网络、社区和ai的帮助。让我们一起继续编程旅程,愿我们的代码之路越走越宽广,收获越来越多!😉😉🚀🌟👨‍💻👩‍💻**


回页目录


7、花絮

  • 对话截屏


回页目录


8、完整源码(Python)

(源码较长,点此跳过源码)

python 复制代码
#!/usr/bin/env python3
import locale


# 设置 locale 为美国英语,这样千位分隔符就是逗号
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')

# 将整数格式化为字符串,包含千位分隔符
formatted_number = locale.format_string("%d", 1234538, grouping=True)

print(f"\n{formatted_number}")  # 输出: 1,234,538


# range步长遍历 #
def format_number_with_commas(number):
    num_str = str(number)
    num_str_reversed = num_str[::-1]
    grouped = ','.join(num_str_reversed[i:i+3] for i in range(0, len(num_str_reversed), 3))
    return grouped[::-1]

print(format_number_with_commas(112225864888555))


# 算术取模 #
def num_to_3(num: int) -> str:
    ''' 用,号格式化输出数字。
    
        我这个函数可以无视int位数,
        都可以正常拆分。 '''
    num_3 = []

    while num > 1000:
        num_3.append(num%1000) # 收集低三位
        num //= 1000 # 去除已拆分的低三位

    num_3.append(num) # 收集拆分余下的三位
    return ','.join(map(str, num_3[::-1])) # ,格式化数字


# 测试 #
print(f"\n{num} => {num_to_3(num)}")


# 序列切片 #
def num_to_3(num: int) -> str:
    ''' 用,号格式化输出数字。
    
        我这个函数可以无视int位数,
        都可以正常拆分。 '''
    num = str(num)
    num_3 = []

    while len(num) > 3:
        num_3.append(num[-4:]) # 收集低三位
        num = num[:-3] # 去除已拆分的低三位

    num_3.append(num) # 收集拆分余下的三位
    return ','.join(num_3[::-1]) # ,格式化数字


# 测试 #
print(f"\n{num} => {num_to_3(num)}")


# f-string #
num = 112225864888555
print(f"{num:,}")
  
  
# str.format方法 #
num = 112225864888555
print("{:,}".format(num))

回页首


上一篇:  菱形打印(Python)~("以块组合块",以行凝结循环打印)~
下一篇:


我的HOT博:

本次共计收集404篇博文笔记信息,总阅读量61.76w。数据采集于2024年11月25日 08:23:38,用时7分56.4秒。阅读量不小于6.00k 的有 9 9 9篇。

  1. 让QQ群昵称色变的神奇代码
    地址:https://blog.csdn.net/m0_57158496/article/details/122566500
    浏览阅读:6.2w
    点赞:25 收藏:89 评论:17
    (本篇笔记于2022-01-18 19:15:08首次发布,最后修改于2022-01-20 07:56:47)
  2. Python列表(list)反序(降序)的7种实现方式
    地址:https://blog.csdn.net/m0_57158496/article/details/128271700
    浏览阅读:1.3w
    点赞:9 收藏:40 评论:8
    (本篇笔记于2022-12-11 23:54:15首次发布,最后修改于2023-03-20 18:13:55)
  3. pandas 数据类型之 DataFrame
    地址:https://blog.csdn.net/m0_57158496/article/details/124525814
    浏览阅读:1.0w
    点赞:7 收藏:40 
    (本篇笔记于2022-05-01 13:20:17首次发布,最后修改于2022-05-08 08:46:13)
  4. 个人信息提取(字符串)
    地址:https://blog.csdn.net/m0_57158496/article/details/124244618
    浏览阅读:1.0w
    点赞:3 收藏:20 
    (本篇笔记于2022-04-18 11:07:12首次发布,最后修改于2022-04-20 13:17:54)
  5. 罗马数字转换器|罗马数字生成器
    地址:https://blog.csdn.net/m0_57158496/article/details/122592047
    浏览阅读:8.2k
    收藏:3 
    (本篇笔记于2022-01-19 23:26:42首次发布,最后修改于2022-01-21 18:37:46)
  6. 统计字符串字符出现的次数
    地址:https://blog.csdn.net/m0_57158496/article/details/130517025
    浏览阅读:8.1k
    点赞:5 收藏:24 
    (本篇笔记于2023-05-06 22:28:18首次发布,最后修改于2023-05-12 06:21:40)
  7. Python字符串居中显示
    地址:https://blog.csdn.net/m0_57158496/article/details/122163023
    浏览阅读:8.0k
    点赞:1 收藏:12 评论:1
  8. 回车符、换行符和回车换行符
    地址:https://blog.csdn.net/m0_57158496/article/details/123109488
    浏览阅读:6.7k
    点赞:2 收藏:4 
    (本篇笔记于2022-02-24 13:10:02首次发布,最后修改于2022-02-25 20:07:40)
  9. python清屏
    地址:https://blog.csdn.net/m0_57158496/article/details/120762101
    浏览阅读:6.1k
    点赞:1 收藏:10

推荐条件 阅读量突破6.00k (更多热博,请点击蓝色文字跳转翻阅)


  • 截屏图片

      (此文涉及ChatPT,曾被csdn多次下架,前几日又因新发笔记被误杀而落马。躺"未过审"还不如回收站,回收站还不如永久不见。😪值此年底清扫,果断移除。留此截图,以识"曾经"。2023-12-31)

回页首


精品文章:

来源:老齐教室


Python 入门指南【Python 3.6.3】


好文力荐:


CSDN实用技巧博文:


相关推荐
Trouvaille ~几秒前
【机器学习】窥数据之序,悟算法之道:机器学习的初心与远方
人工智能·python·深度学习·神经网络·机器学习·自然语言处理·数据分析
MC何失眠18 分钟前
vulnhub靶场之momentum-2
网络·python·学习·网络安全
测试秃头怪20 分钟前
自动化测试框架实战(超详细总结)
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
24203028 分钟前
在VSCode中搭建Python开发环境
python
KevinAha39 分钟前
django 实战(python 3.x/django 3/sqlite)
python·django·sqlite
是十一月末1 小时前
Python语法之正则表达式详解以及re模块中的常用函数
开发语言·python·正则表达式
灵封~2 小时前
PythonQt练习
python
pzx_0013 小时前
【时间序列预测】基于Pytorch实现CNN_LSTM算法
人工智能·pytorch·python·算法·cnn·lstm
@半良人3 小时前
Python迭代器-大数据量的处理
python
hakesashou3 小时前
python中什么是驼峰法
python