查看: 152|回复: 4|关注: 0

[已答复] matlab除法运算结果,本应该是整数,结果却是一个小数

[复制链接]

新手

10 麦片

财富积分


050


1

主题

4

帖子

0

最佳答案
发表于 2020-7-1 10:44:48 | 显示全部楼层 |阅读模式
在matlab的除法运算中,当符号两边都是小数的时候,计算结果有时候会有问题,如下:

9.9/0.1=99
99.9/0.1=999
999.9/0.1=9999
9999.9/0.1=9.999899999999999e+04

随着分子的增大,前三个式子能得到正确的结果(整数),但是第四个计算结果就出问题了,得到的结果是一个极其接近正确结果的小数,目前在matlab2016和matlab2019测试过,都是这样的结果,不知道诸位是否遇到过这种问题,请问造成这种问题的原因是什么?如何避免这种问题出现?毕竟有时候编程未必能注意到这种细节,这种小问题可能就会导致结果出错,但是又很难找到原因,谢谢大家的帮助

回复主题 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

入门

447 麦片

财富积分


50500


21

主题

260

帖子

53

最佳答案
  • 关注者: 7
发表于 2020-7-1 11:31:59 | 显示全部楼层
int32(9999.9/0.1)

针对这种特殊情况可以采用9999.9*10也可以嘛。
回复此楼 已获打赏: 0 积分

举报

新手

10 麦片

财富积分


050


1

主题

4

帖子

0

最佳答案
 楼主| 发表于 2020-7-1 11:38:50 | 显示全部楼层
15631202458 发表于 2020-7-1 11:31
int32(9999.9/0.1)

针对这种特殊情况可以采用9999.9*10也可以嘛。

谢谢您的回复,我是怕以后编程中再有类似的情况发生,可能不只是9999.9/0.1才会出现这种情况,稍有不注意就会出错,请问有没有永久规避这类问题的方法?谢谢
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

5

主题

2340

帖子

706

最佳答案
  • 关注者: 196
发表于 2020-7-1 12:51:52 | 显示全部楼层
需要足够精度时,把double型改为symbolic型就是了
  1. sym( 9999.9 ) / sym( 0.1 )
复制代码

ans =
99999
提问请:①准确描述问题②提出你的思考(等着抄作业的一律锁帖)③提供代码文本而非截图④及时反馈
回复此楼 已获打赏: 0 积分

举报

新手

10 麦片

财富积分


050


1

主题

4

帖子

0

最佳答案
 楼主| 发表于 2020-7-3 15:15:31 | 显示全部楼层
TouAkira 发表于 2020-7-1 12:51
需要足够精度时,把double型改为symbolic型就是了

ans =

嗯嗯,谢谢,您说的这也是一种解决方法,我再想想有没有别的解决方法
回复此楼 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

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