无忧启动论坛

标题: 帮忙看运算错在哪里 [打印本页]

作者: 2011wosliming    时间: 2012-9-10 16:09
提示: 作者被禁止或删除 内容自动屏蔽
作者: pznpt    时间: 2012-9-11 21:51
没有什么诡异的,是你的set用法不对。。。
set /a a=%%i 得到的是带千分位分隔符的值
例如:%%i值为1,024,那么 set /a a=%%i 就等于 set/a a=1,024
也就相当于 set/a a=1,b=024 将 "b=" 省略后的结果
set/a a=1,024就是将1赋值给a,024(8进制)赋给空变量
(其中的","是set/a特有的表达式分隔符,意思是 set/a a=1&set/a b=024)
所以得到的a值为1,而不是1024

改成这样子应该可以:

-----------------------------分割线-----------------------------------
@echo off
if exist lininput_xeon64 del /f /q lininput_xeon64
for /f "tokens=4 delims= " %%i in ('systeminfo^|find "Total Physical Memory"') do (
  set a=%%i
)
set a=%a:,=%
set/a a*=10000,b=a
for /l %%a in (1,1,100) do set /a b=(b+a/b)/2
echo %b:~,-2%
pause
-----------------------------分割线-----------------------------------

PS:请不要给我发短消息,谢谢!

[ 本帖最后由 pznpt 于 2012-9-11 22:08 编辑 ]
作者: 2011wosliming    时间: 2012-9-11 22:57
提示: 作者被禁止或删除 内容自动屏蔽
作者: x9tian    时间: 2012-9-23 12:17
原帖由 2011wosliming 于 2012-9-11 22:57 发表
谢谢指教,中午在公司看了一上午的语法找到了这个问题,
已经解决了,还有个小问题,
do set /a b=(b+a/b)/2 ,,这一句,不知道是格式问题还是哪里定义的不对,有的时候会报 Divide by zero error !
没 ...

   这种bug一直就有,有时还出现无法运行的现像都有,type %0>“%0” 又正常了




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3