Board logo

标题: [数值计算] 批处理分数化小数-位数可以自定义 [打印本页]

作者: myzwd    时间: 2009-3-22 15:07     标题: 批处理分数化小数-位数可以自定义

  1. @echo off &setlocal enabledelayedexpansion &cls &color 1a
  2. echo ------分数化小数 如:1 ÷3=0.333... 位数20,30等都可以------
  3. set /p x=被除数--- &set /p y=除数----- &set /p bit=小数位数--
  4. rem set x=%1 &set y=%2 &set bit=%3
  5. rem 利用参数可以作为函数调用 如fenshu.bat 1 3 12
  6. set x0=%x%
  7. if %x% geq %y% (set /a "a=%x%/%y%" &set /a "x1=%x%%%%y%")
  8. if %x% lss %y% (set a=0 &set x1=%x%)
  9. :00
  10. set /a n+=1
  11. set /a "x1=!x1!*10"
  12. set /a "a1=!x1!/%y%"
  13. set r=!r!!a1!
  14. set /a "x1=!x1!%%%y%"
  15. if !n! lss !bit! goto 00
  16. :end
  17. echo ┎──────────────────────────┒
  18. echo   %x0%÷%y%=%a%.%r%
  19. echo ┖──────────────────────────┛
  20. pause
复制代码
下面的由defanive给出的更好。我把下面的复制到这里来贴上。
  1. @echo off &setlocal enabledelayedexpansion &cls &color 1a
  2. set /p devd=分子:
  3. set /p devr=分母:
  4. set /p devn=位数:
  5. set /a devm=devd%%devr*10
  6. set /a deva=devd/devr
  7. set dans=%deva%.
  8. :loop
  9. set /a devn-=1
  10. set /a deva=devm/devr
  11. set /a devm=devm%%devr*10
  12. set dans=%dans%%deva%
  13. if not %devn%==0 goto loop
  14. echo %dans%
  15. pause
复制代码

作者: defanive    时间: 2009-3-22 15:37

以前也写过一个,貌似我的效率高点。。。
  1. @echo off
  2. set /p devd=分子:
  3. set /p devr=分母:
  4. set /p devn=位数:
  5. set /a devm=devd%%devr*10
  6. set /a deva=devd/devr
  7. set dans=%deva%.
  8. :loop
  9. set /a devn-=1
  10. set /a deva=devm/devr
  11. set /a devm=devm%%devr*10
  12. set dans=%dans%%deva%
  13. if not %devn%==0 goto loop
  14. echo %dans%
  15. pause
复制代码

作者: defanive    时间: 2009-3-22 15:42

而且,貌似我们算出来的结果不太一样。。。

1/9801,循环节貌似是198位。。。
作者: myzwd    时间: 2009-3-22 16:13     标题: 回复 3楼 的帖子

我试试你的,看看你是怎么弄的。 谢谢指出错误。现已改正。这次我们的结果相同了呵呵

[ 本帖最后由 myzwd 于 2009-3-22 17:54 编辑 ]




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2