找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 21661|回复: 9

[数值计算] 为什么解题的bat代码结果比正确答案少1

[复制链接]
发表于 2023-7-19 15:05:40 | 显示全部楼层 |阅读模式
下面的程序用于解答: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
复制代码
发表于 2023-7-19 15:38:32 | 显示全部楼层
  1. @echo off
  2. set /a n=34/5
  3. echo %n%
  4. pause
复制代码
发表于 2023-7-19 15:57:41 | 显示全部楼层
回复 1# LTSC1809


    cmd计算无法精确到小数点,34/5应该是6.8但是.8被省略了就出现这种情况
发表于 2023-7-19 17:55:23 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2023-7-19 21:48:20 | 显示全部楼层
你的批处理代码如下:
```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。
发表于 2023-7-19 21:54:41 | 显示全部楼层
回复 5# 447219071


    是不是抄错了?修改前和修改后的代码一样
 楼主| 发表于 2023-7-19 22:07:49 | 显示全部楼层
感谢大家的帮助,看完感觉批处理不支持浮点数这个问题确实没啥好的解决办法,我再逐个试一试,看看问题是否解决!
 楼主| 发表于 2023-7-19 22:09:08 | 显示全部楼层
回复 4# pd1


    你这个还是得出34-28=34/5,正确的应该是35-28=35/5(我用VBScript试验过,确实是这个结果)
发表于 2023-7-20 00:23:20 | 显示全部楼层
回复 8# LTSC1809

第一个我没改,只是输出xxj说明不对的原因
第二个还是得到34?确定吗?
发表于 2023-7-20 10:33:00 | 显示全部楼层
一定要用批处理来做这种事情
set /a m=x%%5
然后,
if %xj% equ %xxj% if %m%==0 goto endloop
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 15:39 , Processed in 0.018872 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表