当前位置: 首页 > 知识库问答 >
问题:

防止MATLAB对数字进行舍入并设置小数精度

太叔英卫
2023-03-14

我试图显示从序列号接收到的值,但Matlab不接受十进制数结果。我想从一个设备接收A=0.123,值乘以1000,然后通过串行发送到matlab。

matlab脚本接收123,但当该数字被除以以获得原始值时,matlab显示0。

consRollKpTemp = typecast([uint8(mess(typei + 1)), uint8(mess(typei + 2)),uint8(mess(typei + 3)), uint8(mess(typei + 4))], 'int32');
disp(consRollKpTemp);
consRollKp = consRollKpTemp/1000;
disp(consRollKp);

哪个返回

consRollKpTemp:
         123    
consRollKp:
           0

我认为问题在于typecast(X,type)函数

将X中的数值转换为类型指定的数据类型。

我把它改成:

consRollKpTemp = typecast([uint8(mess(typei + 1)), uint8(mess(typei + 2)),uint8(mess(typei + 3)), uint8(mess(typei + 4))], 'single');

但一切都没有改变。我试过这个问题和这里的建议,但都不管用。

共有1个答案

贺景山
2023-03-14

问题是您使用的是int32作为类型,即您只有整数,并且0.23被正确舍入为0。尝试将变量consRollKp强制转换为double,然后再除以1000:

consRollKp = double(consRollKpTemp) / 1000;

澄清:将typecastsingle一起使用将不起作用。Typecast转换数据类型而不更改基础数据。由于single是一个浮点数,uint8int32是整数类型,因此在这些类型之间进行typecast转换将不会得到所需的结果。

尝试将typecast转换为int32(或者可能是uint32),然后在第二步中使用dobule()single()将此变量转换为浮点类型。最后你应该能够除以1000得到正确的结果。

 类似资料:
  • 本文向大家介绍如何停止对MySQL十进制字段进行舍入?,包括了如何停止对MySQL十进制字段进行舍入?的使用技巧和注意事项,需要的朋友参考一下 您可以借助函数停止对十进制字段进行四舍五入。这是四舍五入的十进制字段的演示。对于我们的示例,让我们首先创建一个演示表 使用insert命令在表中插入一些记录。查询如下- 使用select语句显示表中的所有记录。查询如下- 以下是输出 在上面的示例输出中,小

  • 问题内容: 每次使用时,我都会按字母顺序对JSON键进行排序。我不希望按键排序。我可以禁用在中进行的排序吗? 问题答案: 是的,您可以使用以下属性对此进行修改: 但是,请注意,在文档中明确警告不要这样做: 默认情况下,Flask将以对密钥进行排序的方式序列化JSON对象。这样做是为了确保独立于字典的哈希种子,返回值将保持一致,以免浪费外部HTTP缓存。您可以通过更改此变量来覆盖默认行为。不建议这样

  • 问题内容: 我在MySQL中有一个表,该表的字段为小数,长度为9,无符号。我用它来定价。 在插入数据并查询之后,所有数据均已四舍五入,小数点已删除。 我对为什么感到困惑。 故障排除技巧? 主持人 :web.com phpMyAdmin版本 :2.11.10.1 MySQL客户端版本 :5.0.95 问题答案: MySQL中的小数类型有两个调整旋钮:精度和小数位数。您省略了小数位,因此默认为0。 文

  • 问题内容: 如何获取float变量,并控制不使用round()的float的距离?例如。 我想把x做成下面的变量。 如果我使用各自的舍入方法: 它将四舍五入并将数字更改到对我没有用的程度。我了解这是解决问题的关键,并且工作正常。我该如何在x,y,z变量中获取所需的信息,并且仍然能够以浮点格式在其他方程式中使用它们? 问题答案: 你可以做: 测试:

  • 我在MATLAB中有一个代码,它可以处理非常小的数字,例如,我有10^{-25}量级的值,但是当MATLAB进行计算时,值本身被舍入为0。注意,我指的不是来显示这些额外的小数,而是数字本身被更改为0。我认为这是因为默认情况下,MATLAB在计算时最多使用小数点后的15位数字。我如何改变这一点,以便在计算中保留非常小的数字? 编辑: 我的代码如下: 问题出在这一步: 其中“差”非常接近于0。如何在此