[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

【练习-034】批处理浮点计算

出题目的:
 掌握批处理浮点计算的方法
加分标准:
 视情形加分,满分20分
解题限制:
 版主级的暂请观看,但可以做解题提示
题目如下:
 输入任意两个小数(小数点后最多为两位数),通过批处理输出两数的和、差、积、商
(积、商均保留两位小数)。

[ 本帖最后由 batman 于 2009-2-13 17:22 编辑 ]
***共同提高***

Great,不过对分数运算更有兴趣。。。

TOP

我的思路就是将小数点后面和前面分开,然后就分别计算,再加起来咯...
for /f "delims=" %%a in ('%0') do (echo %%a)

TOP

我的思路是提取掉小数点,对齐直接相加。。。

TOP

也行啊...
但是如果不是两位数,而是

1.00000000000000000000000006
9.003

就麻烦了.

但在题目前提下,的确是去掉小数点这样快....
for /f "delims=" %%a in ('%0') do (echo %%a)

TOP

假若超过了CMD限制的话无论是对齐相加还是分段相加都没好结果。。。

TOP

不一定这么说,有个大数算法是可以实现的...
for /f "delims=" %%a in ('%0') do (echo %%a)

TOP

提示:
    此题情况相当复杂,大家可要充分考虑,举个例子:当两数为-0.12 -0.08时。
***共同提高***

TOP

正负倒没什么问题,主要是看小数点怎么处理。。。

TOP

做这种题目的局限性太小,而且要耗费大量的精力,个人感觉没有一个星期想完成这个题目是非常困难的,最要命的是花费了大量的精力,最终却没有一点儿实用价值,建议弄个函数,先对算式进行分析然后再进行计算,这样就是对批处理四则运算,浮点运算及大数运算方面的极大贡献了.
    目前我只是分别做了加减乘除四个函数(在加法和减法函数中没有负数的运算),没有把它们集中在一个脚本里,难度太大了(主要是在对算式的分析上).
    真希望哪位牛人能做出这样一个函数来...

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. set /p a=1数:
  3. set /p b=2数:
  4. set a2=0
  5. for /f "delims=. tokens=1,2" %%i in ("%a%") do set a1=%%i&set a2=%%j
  6. if "%a2%"=="" goto next1
  7. if %a2% leq 9 goto next2
  8. if %a2% gtr 9 goto next3
  9. :next1
  10. set a2=0
  11. set /a a3=a1*100
  12. goto next4
  13. :next2
  14. set /a a3=a1*100+a2*10
  15. goto next4
  16. :next3
  17. set /a a3=a1*100+a2
  18. goto next4
  19. :next4
  20. for /f "delims=. tokens=1,2" %%i in ("%b%") do set b1=%%i&set b2=%%j
  21. if "%b2%"=="" goto next6
  22. if %b2% leq 9 goto next7
  23. if %b2% gtr 9 goto next8
  24. pause
  25. :next6
  26. set b2=0
  27. set /a b3=b1*100
  28. goto next9
  29. :next7
  30. set /a b3=b1*100+b2*10
  31. goto next9
  32. :next8
  33. set /a b3=b1*100+b2
  34. goto next9
  35. :next9
  36. set sign=2
  37. set /a c=a3+b3
  38. set "s=!c:~-%sign%!"
  39. echo !c:%s%=!.%s%
  40. pause>nul
复制代码
这是加法的
bug有不能以.6代替0.6.结果为0.6时,显示为.6
其他的减法的话c=a3-b3就可以了吧
然后乘法的话sign改成4
除法的话最好.c就是结果了.
这题差不多就这样吧.

[ 本帖最后由 lockmove 于 2009-2-13 21:30 编辑 ]
2

评分人数

    • 523066680: 你参与了,你实践了!PB + 8
    • batman: 参与精神很重要!!!PB + 3

TOP

LS发布你做的四则函数,有用。。。

TOP

在cn-dos里发过了吧,表扬一下more同学!
lockmove同学也不错,要是能改成支持任意数是多方便啊...
for /f "delims=" %%a in ('%0') do (echo %%a)

TOP

先发几张程序运行的截图给大家看看,代码就先不发:
***共同提高***

TOP

感觉这题不是一般的难唉,尤其是除法。。!!
赞一个先。!
技术问题请到论坛发帖求助!

TOP

返回列表