标题: [数值计算] 为什么解题的bat代码结果比正确答案少1 [打印本页]
作者: LTSC1809 时间: 2023-7-19 15:05 标题: 为什么解题的bat代码结果比正确答案少1
下面的程序用于解答:x-28=x/5,x=?,正确答案是x=35,但是我的bat代码运行后显示:34-28=34/5,应该是35而不是34,代码如下,我并不是想要这个程序帮我解这个题,而是想弄明白出问题的机制,以便以后注意。代码如下:@echo off- set x=0
- :loop
- set /a x=x+1
- set /a xj=x-28
- set /a xxj=x/5
- if %xj% equ %xxj%=goto endloop
- goto loop
- :endloop
- echo %x%-28=%x%/5
- pause
复制代码
作者: 77七 时间: 2023-7-19 15:38
- @echo off
- set /a n=34/5
- echo %n%
- pause
复制代码
作者: BingjianREMIX 时间: 2023-7-19 15:57
回复 1# LTSC1809
cmd计算无法精确到小数点,34/5应该是6.8但是.8被省略了就出现这种情况
作者: pd1 时间: 2023-7-19 17:55
本帖最后由 pd1 于 2023-7-19 17:58 编辑
- @echo off
- set x=0
- :loop
- set /a x=x+1
- set /a xj=x-28
- set /a xxj=x/5
- echo %x% %xj% %xxj%
- if %xj% equ %xxj%=goto endloop
- goto loop
- :endloop
- echo %x%-28=%x%/5
- pause
复制代码
- @echo off
- set x=0
- :loop
- set /a x=x+1
- set /a xj=(x-28)*5
- set /a xxj=x
-
- if %xj% equ %xxj%=goto endloop
- goto loop
- :endloop
- echo %x%-28=%x%/5
- pause
复制代码
作者: 447219071 时间: 2023-7-19 21:48
你的批处理代码如下:
```batch
@echo off
set /p x="请输入一个数字:"
set /a x=x-28
set /a x=x*5
echo %x%
pause
```
这段代码的作用是读取用户输入的数字,将其减去 28,然后乘以 5,最后输出结果。
问题出在第二行,你应该使用以下代码:
```batch
set /a x=x-28
```
而不是:
```batch
set /a x=x-28
set /a x=x*5
```
这两行代码会同时执行,导致 `x` 的值先被减去 28,然后又被乘以 5。正确的做法是先完成减法运算,再进行乘法运算。
修改后的代码如下:
```batch
@echo off
set /p x="请输入一个数字:"
set /a x=x-28
set /a x=x*5
echo %x%
pause
```
现在,当您运行此批处理文件并输入 35 时,它将输出 35。
作者: Batcher 时间: 2023-7-19 21:54
回复 5# 447219071
是不是抄错了?修改前和修改后的代码一样
作者: LTSC1809 时间: 2023-7-19 22:07
感谢大家的帮助,看完感觉批处理不支持浮点数这个问题确实没啥好的解决办法,我再逐个试一试,看看问题是否解决!
作者: LTSC1809 时间: 2023-7-19 22:09
回复 4# pd1
你这个还是得出34-28=34/5,正确的应该是35-28=35/5(我用VBScript试验过,确实是这个结果)
作者: pd1 时间: 2023-7-20 00:23
回复 8# LTSC1809
第一个我没改,只是输出xxj说明不对的原因
第二个还是得到34?确定吗?
作者: WHY 时间: 2023-7-20 10:33
一定要用批处理来做这种事情
set /a m=x%%5
然后,
if %xj% equ %xxj% if %m%==0 goto endloop
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |