![Board logo](images/default/logo.gif)
标题: [数值计算] 批处理分数化小数-位数可以自定义 [打印本页]
作者: myzwd 时间: 2009-3-22 15:07 标题: 批处理分数化小数-位数可以自定义
- @echo off &setlocal enabledelayedexpansion &cls &color 1a
- echo ------分数化小数 如:1 ÷3=0.333... 位数20,30等都可以------
- set /p x=被除数--- &set /p y=除数----- &set /p bit=小数位数--
- rem set x=%1 &set y=%2 &set bit=%3
- rem 利用参数可以作为函数调用 如fenshu.bat 1 3 12
- set x0=%x%
- if %x% geq %y% (set /a "a=%x%/%y%" &set /a "x1=%x%%%%y%")
- if %x% lss %y% (set a=0 &set x1=%x%)
- :00
- set /a n+=1
- set /a "x1=!x1!*10"
- set /a "a1=!x1!/%y%"
- set r=!r!!a1!
- set /a "x1=!x1!%%%y%"
- if !n! lss !bit! goto 00
- :end
- echo ┎──────────────────────────┒
- echo %x0%÷%y%=%a%.%r%
- echo ┖──────────────────────────┛
- pause
复制代码
下面的由defanive给出的更好。我把下面的复制到这里来贴上。- @echo off &setlocal enabledelayedexpansion &cls &color 1a
- set /p devd=分子:
- set /p devr=分母:
- set /p devn=位数:
- set /a devm=devd%%devr*10
- set /a deva=devd/devr
- set dans=%deva%.
- :loop
- set /a devn-=1
- set /a deva=devm/devr
- set /a devm=devm%%devr*10
- set dans=%dans%%deva%
- if not %devn%==0 goto loop
- echo %dans%
- pause
复制代码
作者: defanive 时间: 2009-3-22 15:37
以前也写过一个,貌似我的效率高点。。。
- @echo off
- set /p devd=分子:
- set /p devr=分母:
- set /p devn=位数:
- set /a devm=devd%%devr*10
- set /a deva=devd/devr
- set dans=%deva%.
- :loop
- set /a devn-=1
- set /a deva=devm/devr
- set /a devm=devm%%devr*10
- set dans=%dans%%deva%
- if not %devn%==0 goto loop
- echo %dans%
- pause
复制代码
作者: defanive 时间: 2009-3-22 15:42
而且,貌似我们算出来的结果不太一样。。。
1/9801,循环节貌似是198位。。。
作者: myzwd 时间: 2009-3-22 16:13 标题: 回复 3楼 的帖子
我试试你的,看看你是怎么弄的。 谢谢指出错误。现已改正。这次我们的结果相同了呵呵
[ 本帖最后由 myzwd 于 2009-3-22 17:54 编辑 ]
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |