[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 happy886rr 于 2016-3-11 20:20 编辑

回复 22# sishentibu
基本上就是按字符串分割的,所以会出现负号被分割的情况如-,300
还需要加一句!p1:-,=-!就更完美了。
这是改进后的
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p num=输入数字:
  4. :cut
  5. if "!num!"=="" (
  6. set p1=!p1:-,^=-!
  7. echo !p1:~1! &pause>nul&exit
  8. )
  9. set p1=,!num:~-3!!p1!
  10. set num=!num:~0,-3!
  11. goto cut
复制代码

TOP

回复 21# happy886rr

你那割法是真巧妙,按我那写法,位数一多就抗不住了。
想了下,你这种写法,只要是有规律的分割都可以啊,不仅仅是数字

TOP

回复 20# sishentibu
对,0,-3那句就是去掉最后三个。自然就空了。

TOP

本帖最后由 sishentibu 于 2016-3-10 20:56 编辑

回复 18# happy886rr


抱歉,开始想错了。

set num=!num:~0,-3!
如果num只有2位数,是不是num就为空了?就是"!num!"=="" ?

TOP

本帖最后由 WHY 于 2016-3-10 21:19 编辑
  1. @echo off & setlocal enabledelayedexpansion
  2. set "n=-1234567890"
  3. for /l %%i in (-18 3 -3) do set "n=!n:~0,%%i!,!n:~%%i!"
  4. for /f "tokens=*delims=," %%i in ("%n%") do set "n=%%i"
  5. echo;%n:-,=-%
  6. pause
复制代码

TOP

本帖最后由 sishentibu 于 2016-3-9 11:52 编辑

回复 9# happy886rr

有个地方写错了。
  1.     @echo off
  2.     set a=1000052
  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:~-6,3%,%a:~-3%))
复制代码
最后一个echo改下就好了

TOP

回复 15# codegay

呵呵,就跟切菜一样。

TOP

本帖最后由 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

评分人数

去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

回复 3# ivor


    直接判断 >=1000  AND >= 1000000 不就行了

TOP

回复 12# CrLf


    提问的人估计超级不爽。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

突然觉得批处理之家已然成为各种脚本一锅乱炖的大杂烩...

TOP

python可以这样:
  1. "{:,}".format(33333)
复制代码
1

评分人数

下载安装python3 https://www.python.org/downloads/ 代码存为xx.py 双击运行或IDLE打开F5运行

TOP

回复 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

评分人数

TOP

回复 5# sishentibu


  我发现1000052是个7位数,但是不兼容

TOP

.net 正则中有一个从右向左搜索的选项:
  1. [regex]::Replace('1234567','(?<=\d)\d{3}', ',$&','RightToLeft')
复制代码
1

评分人数

TOP

返回列表