无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 3007|回复: 3
打印 上一主题 下一主题

帮忙看运算错在哪里

[复制链接]
跳转到指定楼层
1#
发表于 2012-9-10 16:09:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
2#
发表于 2012-9-11 21:51:45 | 只看该作者
没有什么诡异的,是你的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 编辑 ]
回复

使用道具 举报

3#
 楼主| 发表于 2012-9-11 22:57:37 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

4#
发表于 2012-9-23 12:17:46 | 只看该作者
原帖由 2011wosliming 于 2012-9-11 22:57 发表
谢谢指教,中午在公司看了一上午的语法找到了这个问题,
已经解决了,还有个小问题,
do set /a b=(b+a/b)/2 ,,这一句,不知道是格式问题还是哪里定义的不对,有的时候会报 Divide by zero error !
没 ...

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

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-12-1 04:54

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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