我发一个自己做的,是除法运算,被除数,除数都可以为小数,支持负数。
最小分度值为10^-8,可以酌情提升,不过效率会降低。
主要思路:
1、将小数化为整数,具体做法是计算被除数和除数小数部分字串的长度,若被除数的小数部分长度大于除数的小数部分的长度,则在除数的小数部分后补上0,直到除数的小数部分的长度与被除数的小数部分的长度一样,反之亦然,再去掉小数点,将被除数和除数前面的0去掉。
2、开始运算:商=被除数 整除 除数
余数=被除数 取余 除数
如果余数不等于0,商=商. 否则 完成
计数器=0
循环体
如果余数等于0,跳出循环体
循环嵌套,8次,循环变量为a
如果余数比除数小,(
余数*=10
如果循环变量大于2,商=商0
判断结束
循环嵌套结束
余数与除数的商=余数 整除 除数
余数=余数 取余 除数
商=商余数与除数的商 ::两个字符串连接
计数器加1
如果计数器大于10,跳出循环体
循环体结束- @echo off
- rem 已封装
- setlocal enabledelayedexpansion
- set ctr=0
- set "bc=%~1"
- set "c=%~2"
- set f=false
- if "!bc:~0,1!"=="-" if "!c:~0,1!"=="-" (
- set bc=!bc:-=!
- set c=!c:-=!
- set bc=!bc: =!
- set c=!c: =!
- set f=false
- ) else (
- rem nothing
- )
- if "!bc:~0,1!"=="-" if "!c:~0,1!" neq "-" (
- set bc=!bc:-=!
- set bc=!bc: =!
- set f=true
- ) else (
- rem nothing
- )
- if "!bc:~0,1!" neq "-" if "!c:~0,1!"=="-" (
- set c=!c:-=!
- set c=!c: =!
- set f=true
- ) else (
- rem nothing
- )
- set tbc=!bc!
- set tc=!c!
- set tbc=!tbc:.=!
- set tc=!tc:.=!
- set tbc=!tbc: =!
- set tc=!tc: =!
- if !"tbc!" neq "!bc!" if "!tc!" neq "!c!" (
- for /f "delims=. tokens=1-3 eol=a" %%a in ('echo !bc!') do (
- call :len %%b
- set lenbcx=!zz!
- )
- for /f "delims=. tokens=1-3 eol=a" %%a in ('echo !c!') do (
- call :len %%b
- set lencx=!zz!
- )
- ) else (
- goto :r
- )
- if !lenbcx! gtr !lencx! (
- set /a cz=lenbcx-lencx
- for /l %%a in (1,1,!cz!) do (set c=!c!0)
- set c=!c:.=!
- set c=!c: =!
- set bc=!bc:.=!
- set bc=!bc: =!
- ) else (
- if !lenbcx!==!lencx! set bc=!bc:.=! & set c=!c:.=! & set bc=!bc: =! & set c=!c: =! & goto :r
- set /a cz=lencx-lenbcx
- for /l %%a in (1,1,!cz!) do (set bc=!bc!0)
- set c=!c:.=!
- set c=!c: =!
- set bc=!bc:.=!
- set bc=!bc: =!
- )
- :r
- for /l %%a in (1,1,9) do (if "!bc:~0,1!"=="0" set bc=!bc:~1!)
- for /l %%a in (1,1,9) do (if "!c:~0,1!"=="0" set c=!c:~1!)
- set /a "s=bc/c"
- set /a "m=bc %% c"
- if !m!==0 goto :f
- set s=!s!.
- :main
- if !m!==0 goto :f
- for /l %%a in (1,1,8) do (
- if !m! lss !c! (
- set /a m=m*10
- if %%a geq 2 set s=!s!0 & set /a ctr+=1
- ) else (
- rem nothing
- )
- )
- set /a "ss=m/c"
- set /a "m=m %% !c!"
- set s=!s!!ss!
- set s=!s: =!
- set /a ctr+=1
- if !ctr! gtr 10 goto :f
- goto :main
- :f
- if !f!==false (
- echo !s!
- ) else (
- echo -!s!
- )
- goto :eof
- :len
- set "t=%1"
- set zz=0
- for /l %%a in (0,1,11) do (
- if "!t:~%%a,1!"=="" goto :eof
- set /a zz+=1
- )
- goto:eof
复制代码
|