|
|
本帖最后由 dengyuli 于 2014-10-11 15:25 编辑
这个批处理的浮点计算的原理很简单,就是生成vbs文件然后运行它,VBS将值输出到临时文件,然后bat读取临时文件中的值并输出到屏幕,并把值赋给变量%output%
最后清除临时文件和vbs脚本。这个批处理是原创作品。
它还可以比较两个浮点数的大小,支持以下运算:
+,-,*,/,sqr(),sin(),cos(),tan(),ln(),abs(),^(乘方(在表达式中乘方符号为^^^^)) 其中ln()在表达式中应该写成log()
主要缺点:计算速度慢(一般在0.5秒以内,有些时候需要1-2秒)
全部代码如下:- @echo off
- echo ^0>a
- if "%1" == "/?" goto:usage
- if "%1" == "" goto:usage
- if "%1" == "/b" goto:bijiao
- echo c=^%1>>temp.vbe
- echo set fso=createobject^(^"scripting.filesystemobject^"^).opentextfile^(^"a^",2^)>>temp.vbe
- echo fso.write c>>temp.vbe
- goto:r
- :bijiao
- if "%2" == "" echo 错误:缺少值 & echo= & echo 请输入floatc ^/^?查看帮助 & goto:end
- if "%3" == "" echo 错误:缺少值 & echo= & echo 请输入floatc ^/^?查看帮助 & goto:end
- echo set fso=createobject^(^"scripting.filesystemobject^"^).opentextfile^(^"a^",2^)>>temp.vbe
- echo a=^%2>>temp.vbe
- echo b=^%3>>temp.vbe
- echo if a^<b then>>temp.vbe
- echo c=^0>>temp.vbe
- echo fso.write c>>temp.vbe
- echo end if>>temp.vbe
- echo if a=b then>>temp.vbe
- echo c=^1>>temp.vbe
- echo fso.write c>>temp.vbe
- echo end if>>temp.vbe
- echo if a^>b then>>temp.vbe
- echo c=^2>>temp.vbe
- echo fso.write c>>temp.vbe
- echo end if>>temp.vbe
- :r
- call temp.vbe
- set /p output=<a
- echo %output%
- del /f /q temp.vbe >nul
- del /f /q a >nul
- goto:end
- :usage
- echo %~nx0 -- 浮点运算器
- echo=
- echo 用法1:%~nx0 [表达式]
- echo 用法2:%~nx0 ^/b [值1] [值2]
- echo 例:%~nx0 sqr(2)
- echo 输出结果:1.414213562
- echo 如果浮点数在-1和1之间,将省略小数点前的0
- echo 表达式格式与vbs中的表达式相同
- echo=
- echo 注意事项:使用 乘方 和使用 两个加数都是整数的加法 时:
- echo 加法:在加数和被加数的后面要分别加上四个"^",然后加上一个1,
- echo 例如:%~nx0 2^^^^^^^^1+3^^^^^^^^1
- echo 乘方:乘方符号为四个"^"
- echo=
- echo 当值大到一定程度时,会用科学计数法表示,其格式为:X.XXXXXXXE+Y
- echo 用科学计数法表示的数仍然可以比较其大小
- echo=
- echo ^/b 比较值1和值2的大小(值1和值2缺一不可,均可以为浮点数)
- echo 值1比值2小:输出0
- echo 值1等于值2:输出1
- echo 值1比值2大:输出2
- echo=
- :end
复制代码 |
|