中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-14 18:56
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]命令行下通过四则运算得到绝对值
楼 主 [求助]命令行下通过四则运算得到绝对值 发表于 2007-01-17 12:58 ·  中国 广东 广州 天河区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
UID 74552
性别 男
状态 离线
大概如下

set /p a=input
set /a b=算法
%b%为输入数字的绝对值

不使用字符替换或IF判断
2 发表于 2007-01-17 13:27 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  最简单的办法是用字符串替换语句,演示代码如下:

@echo off
set input=
set /p input=请输入实数:
echo %input:-=%
pause

——————————————————
  居然是不要字符替换的,还不允许用if语句,真是太BT了,不知道你这样要求有什么特殊需要。再来一个:

@echo off
set input=
set /p input=请输入实数:
for /f "tokens=* delims=-" %%i in ("%input%") do echo %%i
pause


[ Last edited by namejm on 2007-1-17 at 12:33 AM ]
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
3 发表于 2007-01-17 13:42 ·  中国 广东 广州 天河区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
UID 74552
性别 男
状态 离线
嘿嘿,版主你作弊,我要通过计算来得到绝对值,想了一下午了
4 发表于 2007-01-17 22:23 ·  中国 北京 朝阳区 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
UID 63324
性别 男
状态 离线
第1种方法: 负负得正原理


@echo off

set /p var=请输入负数:
set /a var=-%var%

echo 绝对值为: %var%


计算有小数点儿的数字出错~:)
计算正数出错:)



第2种方法: (负数)-(负数)*2 =(绝对值)


@echo on

set /p var=请输入负数:
set /a var=%var%-%var%*2

echo 绝对值为: %var%


不支持浮点运算。
只支持求负数的绝对值(输入正数则出错)
    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
5 发表于 2007-01-17 23:30 ·  中国 北京 中国科学院研究生院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
UID 74129
性别 男
状态 离线
I got one:

@echo off
set /p n="Input any negative number: "
set /a m=~n+1
echo The absolute of %n% is: %m%
pause >nul

It's too easy by using it.

No decimal fraction, but zero is permitted.

[ Last edited by scriptor on 2007-1-17 at 11:16 AM ]
6 发表于 2007-01-17 23:37 ·  中国 山西 运城 联通
银牌会员
★★★
天的白色影子
积分 2,343
发帖 636
注册 2004-03-06 00:00
UID 19350
性别 男
状态 离线
一个粗劣的例子

a取值的上下限各缩小一半

set /a b=(a*2+1)%%2*a
本帖最近评分记录 (共 5 条) 点击查看详情
评分人分数时间
everest79 +4 2007-01-18 01:12
redtek +9 2007-01-18 02:39
namejm +4 2007-01-18 10:23
lxmxn +4 2007-01-18 11:10
minmin888 +1 2007-05-04 10:58
7 发表于 2007-01-17 23:47 ·  中国 北京 中国科学院研究生院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
UID 74129
性别 男
状态 离线
请把它删除了
写错了

[ Last edited by scriptor on 2007-1-17 at 11:14 AM ]
8 发表于 2007-01-17 23:51 ·  中国 北京 中国科学院研究生院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
UID 74129
性别 男
状态 离线
请版主把它删除了

[ Last edited by scriptor on 2007-1-17 at 11:12 AM ]
9 发表于 2007-01-17 23:59 ·  中国 山西 运城 联通
银牌会员
★★★
天的白色影子
积分 2,343
发帖 636
注册 2004-03-06 00:00
UID 19350
性别 男
状态 离线
scriptor兄

给你两个建议

1、多用中文

2、多做测试
10 发表于 2007-01-18 00:09 ·  中国 北京 中国科学院研究生院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
UID 74129
性别 男
状态 离线
Originally posted by qzwqzw at 2007-1-17 10:59:
scriptor兄

给你两个建议

1、多用中文

2、多做测试


你是说8楼的代码吗?
对不起,搞错了,那个只能计算奇数

谢谢你了

我一时性急就发过来了
11 不尽如此 发表于 2007-01-18 00:15 ·  中国 山西 运城 联通
银牌会员
★★★
天的白色影子
积分 2,343
发帖 636
注册 2004-03-06 00:00
UID 19350
性别 男
状态 离线
对于#4中的 ~n+1 代码,不知你是否拿正整数做过测试?

另外保持版面的简洁是我们共同的义务
12 发表于 2007-01-18 00:19 ·  中国 北京 中国科学院研究生院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
UID 74129
性别 男
状态 离线
我在那里已经说明了:
@echo off
set /p n="Input any negative number: "
是输入负数。

谢谢。记住了
我发现这几天来我犯了很多的错误啊。
真的不好意思再发帖子了
13 发表于 2007-01-18 01:13 ·  中国 广东 广州 天河区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
UID 74552
性别 男
状态 离线
Originally posted by qzwqzw at 2007-1-17 10:37 AM:
一个粗劣的例子

a取值的上下限各缩小一半

set /a b=(a*2+1)%%2*a


谢谢qzwqzw,看来我把问题复杂化了
14 发表于 2007-01-18 10:26 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  qzwqzw 的思路不错,PF。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
15 发表于 2007-01-18 11:38 ·  中国 山东 济南 电信
社区乞丐
★★
此图片另存后死机
积分 -49
发帖 90
注册 2006-12-02 13:00
UID 72412
性别 男
状态 离线
轻轻的问一下:

qzwqzw老师

可不可以利用SET的2进制赋值符号进行转换呢??

[ Last edited by tghksj on 2007-1-17 at 10:50 PM ]
我的网络笔记本.非联系本人请勿访问!http://w.vicp.net
论坛跳转: