中国DOS联盟论坛

中国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:
你这个脚本是支持几位数的计算?
输入被除数:99.66666
输入除数:9.966666
数字位数太多,暂时计算不了

里面我设置了小于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:
2楼的就是用的程序
纯bat化这是为了训练批处理能力

严重同意此观点。

  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:输出结果
上一页  14 5 6 7 8 9 10  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023