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

[其他] [已解决]批处理怎样获得一个数字的位数?

[复制链接]
发表于 2011-3-21 16:32:30 | 显示全部楼层 |阅读模式
本帖最后由 phanphan 于 2011-3-22 03:28 编辑

怎样获得一个数字的位数?
简单快捷的方法,最好不要用累计字符个数的方法


选取的解决方法(特此致谢 #3 zm900612 ):

  1. @echo off&setlocal enabledelayedexpansion
  2. set str=123456
  3. for /l %%a in (0 1 9) do set str=!str:%%a=+1!
  4. set /a num=!str:~1!
  5. echo 共%num%位
  6. pause
复制代码


另:#10随风大大 的思路也很有创意

  1. @echo off
  2. ::变量字符数只能在15个以内(含15个)
  3. set "num=fedcba9876543210"
  4. set var=123
  5. set str=%var%%num%
  6. set str=%str:~15%
  7. set /a str=0x%str:~0,1%
  8. echo 变量 var 有 %str% 个字符
  9. pause
复制代码

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2011-3-21 16:49:17 | 显示全部楼层
LZ的问题怎么感觉像是在对厨师说“我要吃饭啊”
发表于 2011-3-21 16:56:21 | 显示全部楼层
既然是纯数字的,这里有个专门计算纯数字位数的办法,不见得快:
  1. @echo off&setlocal enabledelayedexpansion
  2. set str=123214232143214314
  3. for /l %%a in (0 1 9) do set str=!str:%%a=+1!
  4. echo 共%str:~1%位
  5. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

发表于 2011-3-21 17:02:05 | 显示全部楼层
依次除以 1,10,100.....
直到结果=0,就知道数字的位数了。
发表于 2011-3-21 17:05:05 | 显示全部楼层
或者 在该数前面加-号,变成负数。
然后依次+10,+100....
直到结果>0,就知道位数了
 楼主| 发表于 2011-3-21 17:21:48 | 显示全部楼层
本帖最后由 phanphan 于 2011-3-21 17:26 编辑
LZ的问题怎么感觉像是在对厨师说“我要吃饭啊”
wc726842270 发表于 2011-3-21 16:49


不懂你的意思。你是说我的问题不像是疑问句而是陈述句?
谢谢各位。但是感觉楼上的方法效率还是低了点。有没有更快的办法呢?我把数字当字符串处理,有没有办法直接获得字符串的长度的?
发表于 2011-3-21 17:25:39 | 显示全部楼层
依次除以 1,10,100.....
直到结果=0,就知道数字的位数了。
caruko 发表于 2011-3-21 17:02

当心极限值...
发表于 2011-3-21 17:25:43 | 显示全部楼层
2楼的意思是,都已经是数字了,还要求的位数干嘛?
直接 if var gtr 10,100,1000 就可以了吧
发表于 2011-3-21 17:32:41 | 显示全部楼层
超过极限值后,将使用字符串比较而非数值比较
发表于 2011-3-21 18:46:25 | 显示全部楼层
  1. @echo off
  2. ::变量字符数只能在15个以内(含15个)
  3. set "num=fedcba9876543210"
  4. set var=123
  5. set str=%var%%num%
  6. set str=%str:~15%
  7. set /a str=0x%str:~0,1%
  8. echo 变量 var 有 %str% 个字符
  9. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2011-3-22 01:51:46 | 显示全部楼层
本帖最后由 phanphan 于 2011-3-22 03:09 编辑
既然是纯数字的,这里有个专门计算纯数字位数的办法,不见得快:@echo off&setlocal enabledelayedexpansion
set str=123214232143214314
for /l %%a in (0 1 9) do set str=!str:%%a=+1!
echo 共%str:~1%位
pau ...
zm900612 发表于 2011-3-21 16:56

#3 zm900612的思路不错。但结果还只是一个+1+1+1...的字符串。
我做了一点点加工:

  1. @echo off&setlocal enabledelayedexpansion
  2. set str=123456
  3. for /l %%a in (0 1 9) do set str=!str:%%a=+1!
  4. set /a num=!str:~1!
  5. echo 共%num%位
  6. pause
复制代码

大家都很热心,回复得很及时,谢谢各位!问题基本解决。要是有直接得出字符串长度的命令就好了
 楼主| 发表于 2017-4-8 23:34:32 | 显示全部楼层

怎么得到某个数字的位数

请问怎么得到某个数字的位数? 网上有计算某个字符串长度的代码,可以解决这个问题。但是如果这个字符串是数字的话,有没有更加简单的方法呢?
比如:334 三位数

评分

参与人数 1PB -4 收起 理由
pcl_test -4 发帖前先使用论坛搜索

查看全部评分

发表于 2017-4-9 07:20:25 | 显示全部楼层
本帖最后由 lingqing 于 2017-4-9 07:23 编辑

echo Wscript.Echo len("123456")>tmp.vbs
cscript //noLogo tmp.vbs
vbs有现成的函数,直接用就是了,只要能解决问题,何必死揪住bat不放呢?
发表于 2017-4-9 19:07:47 | 显示全部楼层
本帖最后由 老刘1号 于 2017-4-9 19:09 编辑

回复 13# lingqing


    哪用那么麻烦,
临时文件都用不着

  1. @Set/p sum=Input a number:
  2. @(for /f %%a in ('mshta VBScript:Execute("CreateObject(""Scripting.Filesystemobject"").GetStandardStream(1).Write(len(%sum%))"^)(close^)') do @Echo.%%a)
  3. @Pause
复制代码
发表于 2017-4-9 21:11:52 | 显示全部楼层
本帖最后由 pcl_test 于 2017-4-10 12:16 编辑

1、findstr /o
http://www.bathome.net/redirect. ... =6186&ptid=1289
  1. for /f "useback tokens=1 delims=:" %%a in (`"(echo;123&echo;)|findstr /o ."`) do set /a len=%%a-3
  2. echo;%len%
复制代码
2、折半+查表
http://www.bathome.net/viewthread.php?tid=11799
  1. set a=123fedcba9876543210&call set /a len=0x%%a:~15,1%%
  2. echo;%len%
复制代码
3、
  1. powershell "'123'.length"
复制代码

评分

参与人数 1技术 +1 收起 理由
老刘1号 + 1 学习了,第二个我居然一次看懂。嘿嘿看来汇 ...

查看全部评分

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

本版积分规则

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

GMT+8, 2026-3-17 16:00 , Processed in 0.041313 second(s), 16 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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