[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
我发一个自己做的,是除法运算,被除数,除数都可以为小数,支持负数。
最小分度值为10^-8,可以酌情提升,不过效率会降低。
主要思路:
1、将小数化为整数,具体做法是计算被除数和除数小数部分字串的长度,若被除数的小数部分长度大于除数的小数部分的长度,则在除数的小数部分后补上0,直到除数的小数部分的长度与被除数的小数部分的长度一样,反之亦然,再去掉小数点,将被除数和除数前面的0去掉。
2、开始运算:商=被除数 整除 除数
             余数=被除数 取余 除数
             如果余数不等于0,商=商. 否则 完成
             计数器=0
             循环体
             如果余数等于0,跳出循环体
              循环嵌套,8次,循环变量为a
               如果余数比除数小,(
                       余数*=10
                       如果循环变量大于2,商=商0
                       判断结束
              循环嵌套结束
             余数与除数的商=余数 整除 除数
             余数=余数 取余 除数
             商=商余数与除数的商       ::两个字符串连接
             计数器加1
                    如果计数器大于10,跳出循环体
             循环体结束
  1. @echo off
  2. rem 已封装
  3. setlocal enabledelayedexpansion
  4. set ctr=0
  5. set "bc=%~1"
  6. set "c=%~2"
  7. set f=false
  8. if "!bc:~0,1!"=="-" if "!c:~0,1!"=="-" (
  9. set bc=!bc:-=!
  10. set c=!c:-=!
  11. set bc=!bc: =!
  12. set c=!c: =!
  13. set f=false
  14. ) else (
  15. rem nothing
  16. )
  17. if "!bc:~0,1!"=="-" if "!c:~0,1!" neq "-" (
  18. set bc=!bc:-=!
  19. set bc=!bc: =!
  20. set f=true
  21. ) else (
  22. rem nothing
  23. )
  24. if "!bc:~0,1!" neq "-" if "!c:~0,1!"=="-" (
  25. set c=!c:-=!
  26. set c=!c: =!
  27. set f=true
  28. ) else (
  29. rem nothing
  30. )
  31. set tbc=!bc!
  32. set tc=!c!
  33. set tbc=!tbc:.=!
  34. set tc=!tc:.=!
  35. set tbc=!tbc: =!
  36. set tc=!tc: =!
  37. if !"tbc!" neq "!bc!" if  "!tc!" neq "!c!" (
  38. for /f "delims=. tokens=1-3 eol=a" %%a in ('echo !bc!') do (
  39.   call :len %%b
  40.   set lenbcx=!zz!
  41. )
  42. for /f "delims=. tokens=1-3 eol=a" %%a in ('echo !c!') do (
  43.   call :len %%b
  44.   set lencx=!zz!
  45. )
  46. ) else (
  47. goto :r
  48. )
  49. if !lenbcx! gtr !lencx! (
  50. set /a cz=lenbcx-lencx
  51. for /l %%a in (1,1,!cz!) do (set c=!c!0)
  52. set c=!c:.=!
  53. set c=!c: =!
  54. set bc=!bc:.=!
  55. set bc=!bc: =!
  56. ) else (
  57. if !lenbcx!==!lencx! set bc=!bc:.=! & set c=!c:.=! & set bc=!bc: =! & set c=!c: =! & goto :r
  58. set /a cz=lencx-lenbcx
  59. for /l %%a in (1,1,!cz!) do (set bc=!bc!0)
  60. set c=!c:.=!
  61. set c=!c: =!
  62. set bc=!bc:.=!
  63. set bc=!bc: =!
  64. )
  65. :r
  66. for /l %%a in (1,1,9) do (if "!bc:~0,1!"=="0" set bc=!bc:~1!)
  67. for /l %%a in (1,1,9) do (if "!c:~0,1!"=="0" set c=!c:~1!)
  68. set /a "s=bc/c"
  69. set /a "m=bc %% c"
  70. if !m!==0 goto :f
  71. set s=!s!.
  72. :main
  73. if !m!==0 goto :f
  74. for /l %%a in (1,1,8) do (
  75. if !m! lss !c! (
  76.   set /a m=m*10
  77.   if %%a geq 2 set s=!s!0 & set /a ctr+=1
  78. ) else (
  79. rem nothing
  80. )
  81. )
  82. set /a "ss=m/c"
  83. set /a "m=m %% !c!"
  84. set s=!s!!ss!
  85. set s=!s: =!
  86. set /a ctr+=1
  87. if !ctr! gtr 10 goto :f
  88. goto :main
  89. :f
  90. if !f!==false (
  91. echo !s!
  92. ) else (
  93. echo -!s!
  94. )
  95. goto :eof
  96. :len
  97. set "t=%1"
  98. set zz=0
  99. for /l %%a in (0,1,11) do (
  100. if "!t:~%%a,1!"=="" goto :eof
  101. set /a zz+=1
  102. )
  103. goto:eof
复制代码

TOP

返回列表