找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 170208|回复: 50

[文本处理] 批处理如何给数字添加千分位分隔符?

[复制链接]
发表于 2016-3-8 18:03:11 | 显示全部楼层 |阅读模式
数据位数不定0~7位
正负不定
怎么每隔三位以","号分割输出


是纯数字
试了好多办法
都不完美
比如除法运算
或者%value:~-6,3%这样的
 楼主| 发表于 2016-3-8 18:04:24 | 显示全部楼层
别看我注册时间
初中注册的
现在大学狗
发表于 2016-3-8 18:30:42 | 显示全部楼层
回复 1# zhangenming
  1. set a=123456
  2. if [%a:~3,3%] equ [] (echo %a:~0,3%) else if [%a:~6,3%] equ [] (echo %a:~0,3%,%a:~3,3%) else (echo %a:~0,3%,%a:~3,3%,%a:~6,3%)
复制代码
发表于 2016-3-8 19:44:53 | 显示全部楼层
  1. set "Num=1234567"
  2. PowerShell -c "(%Num%).ToString('0,0')"
复制代码
发表于 2016-3-8 20:08:17 | 显示全部楼层
我是老老实实的算的。。a为变量。。
  1. @echo off
  2. set a=-2000000
  3. set /a b=a/1000
  4. set /a c=a/1000000
  5. if %b%==0 (echo %a%) else (
  6.         if %c%==0 (echo %a:~0,-3%,%a:~-3%) else (echo %a:~0,-6%,%a:~-3,3%,%a:~-3%))
复制代码
发表于 2016-3-8 21:11:36 | 显示全部楼层
正则正向预查:
  1. @mshta http://bathome.net/s/hta/ "'%random%'.replace(/\d(?=(?:\d{3})+$)/g,'$&,')"|more
复制代码

评分

参与人数 1技术 +1 收起 理由
WHY + 1

查看全部评分

发表于 2016-3-8 22:41:25 | 显示全部楼层
楼主可以专心学一门语言了。

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 1

查看全部评分

发表于 2016-3-8 23:12:33 | 显示全部楼层
.net 正则中有一个从右向左搜索的选项:
  1. [regex]::Replace('1234567','(?<=\d)\d{3}', ',$&','RightToLeft')
复制代码

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 1

查看全部评分

发表于 2016-3-9 01:19:44 | 显示全部楼层
回复 5# sishentibu


  我发现1000052是个7位数,但是不兼容
发表于 2016-3-9 01:23:58 | 显示全部楼层
回复 2# zhangenming
批处理也能完成这个任务,只是绕点,但是也完成了。兼容正负数,可以无限位数,也可以切割任意长度字符串。

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set num=-14159265358979323846264338327950288314159265358979323846264338327950288
  4. :cut
  5. set p=!num:~-3!
  6. if "!num!"=="" (echo !p1:~0,-1! & pause & exit)
  7. set p1=!p!,!p1!
  8. set num=!num:~0,-3!
  9. goto cut
复制代码
最大可以切割5千多位的超级大数
运行实例

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 1

查看全部评分

发表于 2016-3-9 02:21:51 | 显示全部楼层
python可以这样:
  1. "{:,}".format(33333)
复制代码

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 1

查看全部评分

发表于 2016-3-9 02:49:37 | 显示全部楼层
突然觉得批处理之家已然成为各种脚本一锅乱炖的大杂烩...
发表于 2016-3-9 02:59:20 | 显示全部楼层
回复 12# CrLf


    提问的人估计超级不爽。
发表于 2016-3-9 09:21:06 | 显示全部楼层
回复 3# ivor


    直接判断 >=1000  AND >= 1000000 不就行了
发表于 2016-3-9 10:43:39 | 显示全部楼层
本帖最后由 codegay 于 2016-3-9 12:17 编辑

哈哈,又撸了个python代码,处理全是数字应该没问题。
  1. 这个问题只要把判断并去掉正负号,然后把字符串翻转,这个问题就等于如何把一个字符串或者序列每3个切成一份。
  2. >>> s="12345"
  3. >>> ','.join([s[::-1][r:r+3] for r in range(0,len(s),3)])[::-1]
  4. '12,345'
  5. >>>
复制代码

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 1

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 00:19 , Processed in 0.025745 second(s), 11 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表