| 网站首页 | 绿色软件 | 绿色数码 | 安全中心 | 屏保中心 | 源码中心 | 电子书库 | 教程库 | 图片库 | 资料库 | 算命 | 笑话 | 广告 | 绿站旧版 | 返回总部 | 
您现在的位置: 绿色软件站 >> 源码中心 >> BAT源码 >> 数值计算 >> 源码信息
热点推荐
最新更新
本类热门
· 去最大最小值后求剩余数组平均值
· 网络配置备份恢复
· 计算2的N次方
· 乘法,加法,计算器
· 九九乘法表
· 求最大公约数和最小公倍数
· 开平方
· 求一列数所有不同组合的和
· 九宫格图案
· 对数字进行排序
推荐软件
其他更新
计算正浮点数的和
运行环境: Win9x/NT/2000/XP/2003 (载入中...)
文件大小: 1 K
软件类别: BAT源码
软件语言: 简体中文
软件属性:       
授权方式: 免费版
添加时间: 2008-3-29 7:11:00
软件等级: ★★★
软件绿化: 佚名
相关链接: 源码演示地址  源码注册地址
下载次数: 日: 周: 月: 总:
软件添加: 审核:lodge 录入:lodge
::软件简介::  

警告:运行BAT源码是一种危险的动作,如果你不熟悉,请不要尝试!

@echo off
:: 分别把两个数的整数和小数部分提取出来
:: 整数部分在高位用0补齐,小数部分在低位用0填充,使得两个数的数位各自对齐
:: 把补齐后数去掉小数点后,从最后一位开始,按位计算两个单位数的和,超过9就向次高位进1
:: 计算到第一位之后,还原小数点的位置,就得到了两个数相加的结果
:: 例如:要计算 4567.5+5.6789,则处理后的数字为45675000+00056789,然后按位做加法操作
:: 理论上可以计算N位数,突破了17位的限制,但是并不能计算位数超过2^32-1的数字,并且还受
:: CMD下变量值长度的限制
:: code by JM 2006-10~ CMD@XP

:: 还要考虑纯负数、正负数混合的情况;

:main
cls
echo.
echo               要计算某几个数字的和,请直接敲回车
echo.
echo                     退出请输入 e
echo.
set num1=0.0
set times=0
set expression=

:input_loop
set num2=
set sum_=
set /a times+=1
set /p num2=        请输入第 %times% 个数:
if /i "%num2%"=="e" exit
if "%num2%"=="" goto result
if "%num2:~0,1%"=="." set num2=0%num2%
call :input_check "%num2%" num2
set expression=%expression%+%num2%

setlocal enabledelayedexpansion
for /f "tokens=1-4 delims=." %%i in ("%num1%.%num2%") do (
    set int1=%%i
    set int2=%%k
    set dec1=%%j
    set dec2=%%l
    call :get_length int1 %%i
    call :get_length int2 %%k
    call :get_length dec1 %%j
    call :get_length dec2 %%l
    call :add_zero
    call :sum
    goto input_loop
)

:input_check
rem =========== 检测输入是否正确 ===========
echo %1|findstr "\.">nul||set %~2=%~1.0
for /f "tokens=1* delims=." %%i in (%1) do (
    echo %%i%%j|findstr "^[0-9]*$">nul || (set /a times-=1&goto input_loop)
)
goto :eof   

:get_length
rem =========== 计算各部分数字的长度 ===========
set count=0
:intercept
set /a count+=1
for /f %%i in ("%2") do (
    set var=%%i
    if not "!var:~%count%,1!"=="" goto intercept
    set %1_length=!count!
)
goto :eof

:add_zero
rem =========== 分别在整数部分和小数部分添加0字符串 ===========
:: 在数位不够的整数部分添0补齐
set /a int_length_diff=%int1_length%-%int2_length%
set int_length_diff=%int_length_diff:-=%
call :creat_zero int_zero %int_length_diff%
if %int1_length% gtr %int2_length% (
    set int2=%int_zero%%int2%
    set int_length_max=%int1_length%
    ) else (
    set int1=%int_zero%%int1%
    set int_length_max=%int2_length%
)
:: 在数位不够的小数部分添0补齐
set /a dec_length_diff=%dec1_length%-%dec2_length%
set dec_length_diff=%dec_length_diff:-=%
call :creat_zero dec_zero %dec_length_diff%
if %dec1_length% gtr %dec2_length% (
    set dec2=%dec2%%dec_zero%
    set dec_length_max=%dec1_length%
    ) else (
    set dec1=%dec1%%dec_zero%
    set dec_length_max=%dec2_length%
)
goto :eof

:creat_zero
rem =========== 根据数字字符串长度的差异,生成相应长度的0字符串 ===========
set zero=
for /l %%i in (1,1,%2) do set zero=!zero!0
set %1=%zero%
goto :eof

:sum
rem =========== 按位计算新数的和 ===========
:: 提取整数部分和小数部分来组成新数
set num1_new=%int1%%dec1%
set num2_new=%int2%%dec2%
set /a length_total=%int_length_max%+%dec_length_max%
set switch=0
set sum_tmp=
for /l %%i in (1,1,%length_total%) do (
    set /a sum_tmp=!num1_new:~-%%i,1!+!num2_new:~-%%i,1!+!switch!
    if !sum_tmp! gtr 9 (
        set /a sum_tmp=!sum_tmp!-10
        set switch=1
        ) else (
        set switch=0
    )
    set sum_=!sum_tmp!!sum_!
)
:: 插入小数点
set sum_=!sum_:~0,-%dec_length_max%!.!sum_:~-%dec_length_max%!
:: 判断在最高位时是否进位
if %switch% equ 1 (
    set num1=1%sum_%
    ) else (
    set num1=%sum_%
)
goto :eof

:result
if "%expression%"=="" set /a times-=1&goto input_loop
echo.
echo   %expression:~1%=%num1%
echo.
pause
goto main


@echo off
:: 分别把两个数的整数和小数部分提取出来
:: 整数部分在高位用0补齐,小数部分在低位用0填充,使得两个数的数位各自对齐
:: 把补齐后数去掉小数点后,从最后一位开始,按位计算两个单位数的和,超过9就向次高位进1
:: 计算到第一位之后,还原小数点的位置,就得到了两个数相加的结果
:: 例如:要计算 4567.5+5.6789,则处理后的数字为45675000+00056789,然后按位做加法操作
:: 理论上可以计算N位数,突破了17位的限制,但是并不能计算位数超过2^32-1的数字,并且还受
:: CMD下变量值长度的限制
:: code by JM 2006-10~ CMD@XP

:: 还要考虑纯负数、正负数混合的情况;

:main
cls
echo.
echo               要计算某几个数字的和,请直接敲回车
echo.
echo                     退出请输入 e
echo.
set num1=0.0
set times=0
set expression=

:input_loop
set num2=
set sum_=
set /a times+=1
set /p num2=        请输入第 %times% 个数:
if /i "%num2%"=="e" exit
if "%num2%"=="" goto result
if "%num2:~0,1%"=="." set num2=0%num2%
call :input_check "%num2%" num2
set expression=%expression%+%num2%

setlocal enabledelayedexpansion
for /f "tokens=1-4 delims=." %%i in ("%num1%.%num2%") do (
    set int1=%%i
    set int2=%%k
    set dec1=%%j
    set dec2=%%l
    call :get_length int1 %%i
    call :get_length int2 %%k
    call :get_length dec1 %%j
    call :get_length dec2 %%l
    call :add_zero
    call :sum
    goto input_loop
)

:input_check
rem =========== 检测输入是否正确 ===========
echo %1|findstr "\.">nul||set %~2=%~1.0
for /f "tokens=1* delims=." %%i in (%1) do (
    echo %%i%%j|findstr "^[0-9]*$">nul || (set /a times-=1&goto input_loop)
)
goto :eof   

:get_length
rem =========== 计算各部分数字的长度 ===========
set count=0
:intercept
set /a count+=1
for /f %%i in ("%2") do (
    set var=%%i
    if not "!var:~%count%,1!"=="" goto intercept
    set %1_length=!count!
)
goto :eof

:add_zero
rem =========== 分别在整数部分和小数部分添加0字符串 ===========
:: 在数位不够的整数部分添0补齐
set /a int_length_diff=%int1_length%-%int2_length%
set int_length_diff=%int_length_diff:-=%
call :creat_zero int_zero %int_length_diff%
if %int1_length% gtr %int2_length% (
    set int2=%int_zero%%int2%
    set int_length_max=%int1_length%
    ) else (
    set int1=%int_zero%%int1%
    set int_length_max=%int2_length%
)
:: 在数位不够的小数部分添0补齐
set /a dec_length_diff=%dec1_length%-%dec2_length%
set dec_length_diff=%dec_length_diff:-=%
call :creat_zero dec_zero %dec_length_diff%
if %dec1_length% gtr %dec2_length% (
    set dec2=%dec2%%dec_zero%
    set dec_length_max=%dec1_length%
    ) else (
    set dec1=%dec1%%dec_zero%
    set dec_length_max=%dec2_length%
)
goto :eof

:creat_zero
rem =========== 根据数字字符串长度的差异,生成相应长度的0字符串 ===========
set zero=
for /l %%i in (1,1,%2) do set zero=!zero!0
set %1=%zero%
goto :eof

:sum
rem =========== 按位计算新数的和 ===========
:: 提取整数部分和小数部分来组成新数
set num1_new=%int1%%dec1%
set num2_new=%int2%%dec2%
set /a length_total=%int_length_max%+%dec_length_max%
set switch=0
set sum_tmp=
for /l %%i in (1,1,%length_total%) do (
    set /a sum_tmp=!num1_new:~-%%i,1!+!num2_new:~-%%i,1!+!switch!
    if !sum_tmp! gtr 9 (
        set /a sum_tmp=!sum_tmp!-10
        set switch=1
        ) else (
        set switch=0
    )
    set sum_=!sum_tmp!!sum_!
)
:: 插入小数点
set sum_=!sum_:~0,-%dec_length_max%!.!sum_:~-%dec_length_max%!
:: 判断在最高位时是否进位
if %switch% equ 1 (
    set num1=1%sum_%
    ) else (
    set num1=%sum_%
)
goto :eof

:result
if "%expression%"=="" set /a times-=1&goto input_loop
echo.
echo   %expression:~1%=%num1%
echo.
pause
goto main

::下载地址::  
·电信服务器一  ·电信服务器二  ·网通服务器二  ·网通服务器一  
::相关软件::  
酷我音盒(自带100万首歌曲的播放器)
没有相关源码
(载入中...)
::相关教程::
::下载说明::
为了达到最快的下载速度,推荐使用网际快车下载本站软件。
如果您发现该软件不能下载,请通知管理员或点击【此处报错】,谢谢!
未经本站明确许可,任何网站不得非法盗链及抄袭本站资源;如引用页面,请注明来自本站,谢谢您的支持!
      网友评论:(评论内容只代表网友观点,与本站立场无关!) 发表评论