![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-15 13:00 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,268 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [共同参与][挑战思路][批处理处理浮点运算] |
| 可打印版本 45,403 / 136 |
| 第91楼 vkill | 发表于 2006-10-18 05:57 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
欢迎继续测试~
|
|
| 第92楼 不得不爱 | 发表于 2006-10-19 08:56 |
| 超级版主 发帖 2,044 积分 5,310 来自 四川南充 | |
|
你这个脚本是支持几位数的计算?
输入被除数:99.66666 输入除数:9.966666 数字位数太多,暂时计算不了 |
|
| 第93楼 yfd11 | 发表于 2006-10-19 10:07 |
| 初级用户 发帖 15 积分 44 | |
|
思路:
两数字长度有限: FOR /L %%i IN (start,step,end) DO if "%num1:~"%%i",1" == "".""set set num1=%%i 得到小数点位置. 很多或未知,用循环即. set /a i=0 :start if "%num1:~"%%i",1" == "".""set set num1小数点位置=%%i &goto :end &::find用XP好像是外部命令 set /a i+=1 goto :start 得到两数字的小数点位置. 从小数点开始顺环计算整数部分. 如: set /a k=num1小数点位置 set /a j=num2小数点位置 :start1 if %num1:%k%,1% =="" set num11=0 if %num2:%j%,1% =="" set num22=0 set /a num11=%num1:%k%,1% set /a num22=%num2:%j%,1% set /a Valu=num11+num22 set /a k+=1 &set /a j+=1 if if %num1:%k%,1% =="" if %num2:%j%,1% =="" else :goto :end1 同理处理小数点后的位数. 再用ECHO输出 上的%num2:%j%,1% 中间变量能否用ALT+8来做计算没测试. |
|
| 第94楼 vkill | 发表于 2006-10-19 21:27 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
Originally posted by qwe1234567 at 2006-10-19 08:56: 里面我设置了小于7,可以取消看看 |
|
| 第95楼 yfd11 | 发表于 2006-10-20 01:27 |
| 初级用户 发帖 15 积分 44 | |
|
rem 测试系数是WINXPSP2
::C:\>ver :: ::Microsoft Windows XP @echo off set asicc=智123445679890弱ceho %asicc:~-3,1%%asicc:~-4,1%%asicc:~-2% %asicc:~-5,1%%asicc:~0,1%制作:QQ%asicc:~4,2%%asicc:~1,1%%asicc:~6,1%%asicc:~5,1%%asicc:~-6,1%%asicc:~2,1%%asicc:~3,1%%asicc:~12,1% set /p num1=请输入数字1: set /p num2=请输入数字2: ::set num1=%num1%00&set num2=%num2%00 REM 得到num1,num2小数点位置 set /a i=0 :start1 call set num11=%%num1:~%i%,1%%&call set num22=%%num2:~%i%,1%% ::echo %num11% ,,,,,%num22%,,,,%num111%,,,,%num222% &pause if "%num11%" == "." set n1=%i%&set a1=true if "%num22%" == "." set n2=%i%&set a2=true if "%a1%" == "true" if "%a2%" == "%a1%" goto :next2 set /a i+=1 goto :start1 :next2 echo 结束 小数点1位置%n1% ,,,,小数点2位置%n2%,,,num1=%num1%,,,num2=%num2% Rem 得到小数部分的数字两数相加的结果 set/a a1=n1&set /a a2=n2&::a1,a2这里又用来 ::echo a1=%a1% n1=%n1% a2=%a2% n2=%n2% set /a value=0 :start2 set/a n1+=1&set /a n2+=1 call set t1=%%num1:~%n1%,1%%&call set t2=%%num2:~%n2%,1%% ::echo t1=%t1% t2=%t2% if "%t1%" == "" call set value=%value%%%num2:~%n2%%%& goto :next3 if "%t2%" == "" call set value=%value%%%num1:~%n1%%%& goto :next3 set /a tmp1=%t1%+%t2% &set tmp2=%value:~-1% if "%tmp1:~1,2%" NEQ "" set/a tmp2+=1 ::echo tmp2=%tmp2% set value=%value:~0,-1%%tmp2%%tmp1:~-1% ::echo %value% &pause goto start2 :next3 set z=%value:~0,1% echo value=%value% echo z=%z% pause REM 计算整数部分 ::set value2=0 :start3 set/a a1-=1&set /a a2-=1 call set t1=%%num1:~%a1%,1%%&call set t2=%%num2:~%a2%,1%% ::echo t1=%t1% t2=%t2% set /a tmp1=%t1%+%t2%+%z% if "%tmp1:~1,2%" NEQ "" set/a z=1 set value2=%tmp1:~-1%%value2% if "%a1%" == "0" call set value1=%%num2:~0,%a2%%%& goto :next4 if "%a2%" == "0" call set value1=%%num1:~0,%a1%%%& goto :next4 ::echo value2=%value2% tmp2=%tmp2% z进位=%z% tmp1两数相加结果=%tmp1%&pause set /a z=0 goto start3 :next4 echo value1=%value1% z=%z% value2=%value2% &pause REM 计算剩余部分+1的可能 if "%z%" NEQ "1" goto :end set /a a1=a1-a2 if "%a1:~0,1%" == "-" set a1=%a1:~1% echo on :start4 if "%a1%" == "0" goto :end set /a t1=%a1% set /a a1-=1 call set tmp1=%%value1:~%a1%,1%% ::echo 取%a1%位置的数%tmp1% set/a tmp1+=1 call set tmp2=%%value1:~0,%a1%%% call set i=%%value1:~%t1%%% echo 0到%a%位置的数%tmp2% set value1=%tmp2%%tmp1:~-1%%i% echo value1(加1后结果)=%value1% tmp1(加1的数)=%tmp1% tmp2(1-a1字符)=%tmp2% i从当前到最后字符=%i% &pause set z=0 if "%tmp1:~1,2%" NEQ "" set z=1&goto :start4 :end if "%z%"=="0" set z= echo 结果数是=%z%%value1%%value2%.%value:~1% %asicc:~-3,1%c%asicc:~-2% 感谢使用本软件有问题请联系QQ:%asicc:~4,2%15%asicc:~4,1%0230 echo 按任意键退出&pause >nul 2>nul ::待测式::晕有太多错误.不过还可能有错误 ::长度为SET所能容纳长度. ::程序位数可以加大来循环.就是不用一位一位的算,如二位数与两位数或更大的比较快一点,这里顺环变量是1 ::请问楼主,能不能构造程序,来运行自已的程序呢? [ Last edited by yfd11 on 2006-10-20 at 06:26 ] |
|
| 第96楼 electronixtar | 发表于 2006-10-20 01:38 |
| 铂金会员 发帖 2,672 积分 7,493 | |
|
2楼的就是用的程序
纯bat化这是为了训练批处理能力 |
|
| 第97楼 pengfei | 发表于 2006-10-20 01:56 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
|
不知95楼这段脚本具体实现什么功能, 好像变量出了点问题.
|
|
| 第98楼 pengfei | 发表于 2006-10-20 02:25 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
|
讨论了这么久真的有点厌倦了, he200307兄除法运算的算法不够成熟, 而且在一些细节上处理得不够细致, 你的代码没有仔细看. 这里帮你解决最后小数点进位的问题. 代码有点啰嗦.
[ Last edited by pengfei on 2006-10-21 at 01:14 ] |
|
| 第99楼 lxmxn | 发表于 2006-10-20 02:33 |
| 版主 发帖 4,938 积分 11,386 | |
Originally posted by electronixtar at 2006-10-20 01:38: 严重同意此观点。 redtek兄发的这两个主题都是锻炼我们批处理能力的。 |
|
| 第100楼 不得不爱 | 发表于 2006-10-20 03:01 |
| 超级版主 发帖 2,044 积分 5,310 来自 四川南充 | |
|
95楼代码我在2000里运行就显示些乱七八糟的东西,也不知道什么是结果,你那个代码不是用来计算的吗?
|
|
| 第101楼 vkill | 发表于 2006-10-20 03:40 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
被除数多少位都可以实现:789/9=(7/9)的值补00+(8/9)的值补0+9/9
除数没有想到好方法 |
|
| 第102楼 不得不爱 | 发表于 2006-10-20 05:06 |
| 超级版主 发帖 2,044 积分 5,310 来自 四川南充 | |
|
我也来个除法运算脚本,经过我的测试是没有问题,请大家测试:
|
|
| 第103楼 不得不爱 | 发表于 2006-10-20 05:08 |
| 超级版主 发帖 2,044 积分 5,310 来自 四川南充 | |
|
计算结果是保留40位小数
|
|
| 第104楼 vkill | 发表于 2006-10-20 05:21 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
qwe1234567 斑竹 加点说明哈~要么说说思路哈~
|
|
| 第105楼 不得不爱 | 发表于 2006-10-20 05:35 |
| 超级版主 发帖 2,044 积分 5,310 来自 四川南充 | |
|
那我大概说下:
1:检查错误与符号 2:小数点对齐 3:计算整数的位数 4:被除数尾数上加41个0 5:除数尾数去0 6:开始计算 7:确定小数点的位置 8:输出结果 |
|
| 上一页 1 … 4 5 6 7 8 9 10 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |