Board logo

标题: [数值计算] 为什么解题的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
  1. set x=0
  2. :loop
  3. set /a x=x+1
  4. set /a xj=x-28
  5. set /a xxj=x/5
  6. if %xj% equ %xxj%=goto endloop
  7. goto loop
  8. :endloop
  9. echo %x%-28=%x%/5
  10. pause
复制代码

作者: 77七    时间: 2023-7-19 15:38

  1. @echo off
  2. set /a n=34/5
  3. echo %n%
  4. 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 编辑
  1. @echo off
  2. set x=0
  3. :loop
  4. set /a x=x+1
  5. set /a xj=x-28
  6. set /a xxj=x/5
  7. echo %x%    %xj%      %xxj%
  8. if %xj% equ %xxj%=goto endloop
  9. goto loop
  10. :endloop
  11. echo %x%-28=%x%/5
  12. pause
复制代码
  1. @echo off
  2. set x=0
  3. :loop
  4. set /a x=x+1
  5. set /a xj=(x-28)*5
  6. set /a xxj=x
  7. if %xj% equ %xxj%=goto endloop
  8. goto loop
  9. :endloop
  10. echo %x%-28=%x%/5
  11. 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://www.bathome.net/) Powered by Discuz! 7.2