标题: [其他] [已解决]批处理怎样获得一个数字的位数? [打印本页]
作者: phanphan 时间: 2011-3-21 16:32 标题: [已解决]批处理怎样获得一个数字的位数?
本帖最后由 phanphan 于 2011-3-22 03:28 编辑
怎样获得一个数字的位数?
简单快捷的方法,最好不要用累计字符个数的方法
选取的解决方法(特此致谢 #3 zm900612 ):
-
- @echo off&setlocal enabledelayedexpansion
- set str=123456
- for /l %%a in (0 1 9) do set str=!str:%%a=+1!
- set /a num=!str:~1!
- echo 共%num%位
- pause
复制代码
另:#10随风大大 的思路也很有创意
-
- @echo off
- ::变量字符数只能在15个以内(含15个)
- set "num=fedcba9876543210"
- set var=123
- set str=%var%%num%
- set str=%str:~15%
- set /a str=0x%str:~0,1%
- echo 变量 var 有 %str% 个字符
- pause
复制代码
作者: wc726842270 时间: 2011-3-21 16:49
LZ的问题怎么感觉像是在对厨师说“我要吃饭啊”
作者: CrLf 时间: 2011-3-21 16:56
既然是纯数字的,这里有个专门计算纯数字位数的办法,不见得快:- @echo off&setlocal enabledelayedexpansion
- set str=123214232143214314
- for /l %%a in (0 1 9) do set str=!str:%%a=+1!
- echo 共%str:~1%位
- pause
复制代码
作者: caruko 时间: 2011-3-21 17:02
依次除以 1,10,100.....
直到结果=0,就知道数字的位数了。
作者: caruko 时间: 2011-3-21 17:05
或者 在该数前面加-号,变成负数。
然后依次+10,+100....
直到结果>0,就知道位数了
作者: phanphan 时间: 2011-3-21 17:21
本帖最后由 phanphan 于 2011-3-21 17:26 编辑
LZ的问题怎么感觉像是在对厨师说“我要吃饭啊”
wc726842270 发表于 2011-3-21 16:49
不懂你的意思。你是说我的问题不像是疑问句而是陈述句?
谢谢各位。但是感觉楼上的方法效率还是低了点。有没有更快的办法呢?我把数字当字符串处理,有没有办法直接获得字符串的长度的?
作者: CrLf 时间: 2011-3-21 17:25
依次除以 1,10,100.....
直到结果=0,就知道数字的位数了。
caruko 发表于 2011-3-21 17:02
当心极限值...
作者: caruko 时间: 2011-3-21 17:25
2楼的意思是,都已经是数字了,还要求的位数干嘛?
直接 if var gtr 10,100,1000 就可以了吧
作者: CrLf 时间: 2011-3-21 17:32
超过极限值后,将使用字符串比较而非数值比较
作者: 随风 时间: 2011-3-21 18:46
- @echo off
- ::变量字符数只能在15个以内(含15个)
- set "num=fedcba9876543210"
- set var=123
- set str=%var%%num%
- set str=%str:~15%
- set /a str=0x%str:~0,1%
- echo 变量 var 有 %str% 个字符
- pause
复制代码
作者: phanphan 时间: 2011-3-22 01:51
本帖最后由 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...的字符串。
我做了一点点加工:
-
- @echo off&setlocal enabledelayedexpansion
- set str=123456
- for /l %%a in (0 1 9) do set str=!str:%%a=+1!
- set /a num=!str:~1!
- echo 共%num%位
- pause
复制代码
大家都很热心,回复得很及时,谢谢各位!问题基本解决。要是有直接得出字符串长度的命令就好了
作者: phanphan 时间: 2017-4-8 23:34 标题: 怎么得到某个数字的位数
请问怎么得到某个数字的位数? 网上有计算某个字符串长度的代码,可以解决这个问题。但是如果这个字符串是数字的话,有没有更加简单的方法呢?
比如:334 三位数
作者: lingqing 时间: 2017-4-9 07:20
本帖最后由 lingqing 于 2017-4-9 07:23 编辑
echo Wscript.Echo len("123456")>tmp.vbs
cscript //noLogo tmp.vbs
vbs有现成的函数,直接用就是了,只要能解决问题,何必死揪住bat不放呢?
作者: 老刘1号 时间: 2017-4-9 19:07
本帖最后由 老刘1号 于 2017-4-9 19:09 编辑
回复 13# lingqing
哪用那么麻烦,
临时文件都用不着- @Set/p sum=Input a number:
- @(for /f %%a in ('mshta VBScript:Execute("CreateObject(""Scripting.Filesystemobject"").GetStandardStream(1).Write(len(%sum%))"^)(close^)') do @Echo.%%a)
- @Pause
复制代码
作者: pcl_test 时间: 2017-4-9 21:11
本帖最后由 pcl_test 于 2017-4-10 12:16 编辑
1、findstr /o
http://www.bathome.net/redirect. ... =6186&ptid=1289- for /f "useback tokens=1 delims=:" %%a in (`"(echo;123&echo;)|findstr /o ."`) do set /a len=%%a-3
- echo;%len%
复制代码
2、折半+查表
http://www.bathome.net/viewthread.php?tid=11799- set a=123fedcba9876543210&call set /a len=0x%%a:~15,1%%
- echo;%len%
复制代码
3、- powershell "'123'.length"
复制代码
作者: happy886rr 时间: 2017-4-9 22:51
回复 14# 老刘1号
I-CMD分支- @echo off
- set str=3563765375979753623261297373263
- set/f=LinkDllW L"MSVCRT"&set/f len=strlen A%str%&call set/p=%%len%%
复制代码
作者: lingqing 时间: 2017-4-10 10:10
回复 14# 老刘1号
在电脑运行慢的时候mshta会闪一个白色的窗口,要不我也不用临时文件.
作者: 老刘1号 时间: 2017-4-10 12:17
回复 17# lingqing
抛开这个不说……
咱们这样挖坟真的好?
11年的帖子啊……
作者: phanphan 时间: 2017-4-23 01:26
5年前我问了同样的问题,活该被版主扣分,这坟挖得连自己都猝不及防。不过又有不少大师们贡献了新思路,学习了。
作者: phanphan 时间: 2017-4-23 01:28
回复 18# 老刘1号
老兄不用担心,这坟是我自己挖的。。。
作者: 老刘1号 时间: 2017-4-23 10:14
回复 20# phanphan
仰望老会员<_<
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |