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

移除浮点值c的尾随零

薛浩言
2023-03-14

我正在尝试设置一个 nodemcu 模块来收集来自温度传感器的数据,并使用 mqtt pubsubclient 将其发送到我的 mqtt 代理,但这不是问题所在。

我正在尝试以只有一个小数的格式发送温度,此时我已经成功地将其向上或向下舍入,但格式不正确。截至目前,它将温度四舍五入为24.50,27.80,23.10等。我想删除尾随的zereos,所以它变成24.5,27.8,23.1等。

到目前为止,我已经设置了以下代码:

#include <math.h>
#include <PubSubClient.h>
#include <ESP8266WiFi.h>


float temp = 0;

void loop {
  float newTemp = sensors.getTempCByIndex(0);

  temp = roundf((newTemp * 10)) / 10;
  serial.println(String(temp).c_str())
  client.publish("/test/temperature", String(temp).c_str(), true);

}

我对c相当陌生,所以任何帮助将不胜感激。

共有3个答案

孔鸿远
2023-03-14

您使用的库不是标准C的一部分。您使用的String是非标准的。

正如皮特·贝克尔(Pete Becker)在他的回答中指出的那样,您将无法通过更改温度值来控制尾随零。您需要在将其转换为 String 时控制精度,或者执行转换,然后调整生成的字符串。

如果您阅读正在使用的String类型的留档,可能会有do a或do a选项;

  • 控制将float写入字符串时的精度;或
  • 检查String中的字符,并手动删除后面的零

或者您可以使用std::ostrstreamstd::字符串中生成值,然后使用它。

黄德明
2023-03-14

无论您对它们做什么,浮点值始终具有相同的精度。要控制文本字符串中的位数,请更改将值转换为文本的方式。在普通C中(即,没有String类型的地方

std::ostrstream out;
out << std::fixed << std::setprecision(3) << value;
std::string text = out.str();

在您正在使用的环境中,您必须使用标准流或弄清楚该环境为控制浮点到文本的转换提供了什么。

韩彦君
2023-03-14

还不清楚你的API是什么。看起来你想传入C字符串。在这种情况下,只需使用sprintf

#include <stdio.h>

float temp = sensors.getTempCByIndex(0);
char s[30];
sprintf(s, "%.1f", temp);
client.publish("/test/temperature", s, true);
 类似资料:
  • 我的java程序中有一些浮点变量: 在我的计算中,浮点变量小数点后的位数会增加或减少,以保持精度。例如,在一些计算系统之后。出来println(var1);可打印: 或 或 我想将这些值四舍五入到小数点后的3位,并删除后续的小数位数,以便对float进行四舍五入,如下所示: 据我所知,数字格式和字符串。format()以格式化字符串的形式返回输出。如何将输出作为四舍五入浮点,以便在计算中进一步使用

  • 问题内容: 我正在寻找一种将数字转换为字符串格式的方式,删除任何多余的“ .0” 输入数据是浮点数和字符串的混合。所需的输出: 0->‘0’ 0.0->‘0’ 0.1->‘0.1’ 1.0->‘1’ 我想出了以下生成器表达式,但是我想知道是否有更快的方法: 进行真值检查可防止0变成空字符串。 编辑:我现在或多或少可以接受的解决方案是这样的: 似乎没有一种优雅的方法可以在python中处理这种(相当

  • 问题内容: 我需要从去除尾随零沿。例如, 可以,但是在诸如此类的情况下,它会返回科学计数法, 在这种情况下,它返回。我需要在JSF中的自定义转换器中使用它,这对于最终用户可能很难看。那么,这样做的正确方法是什么? 问题答案: 用 我还没有进入JSF,但转换器可能看起来像这样: 然后在xhtml中:

  • 问题内容: 如何格式化浮点数,使其不包含尾随零?换句话说,我希望结果字符串尽可能短。 例如: 问题答案: 你可以%g用来实现以下目的: 或者,对于Python 2.6或更高版本:

  • 问题内容: 我有字符串(来自DB),其中可能包含数字值。如果它包含数值,我想删除尾随零,例如: ,仅适用于第一个,而不适用于第二个。 很多答案都指向使用,但是我得到的可能不是数字。因此,我认为更好的解决方案可能是通过Regex。 问题答案: 有可能: 我懒又傻,只是 使用相同的解决方案,而不是某些注释中提到的,以便于理解

  • 我最近一直在开发一个需要存储和加载大量数据的系统,包括单精度浮点值。我决定在网络上对整数的字节顺序进行标准化,并决定以big-endian格式存储浮点值,即: 理想情况下,我希望提供像和这样的函数,因为我已经将它们用于抽汲整数,并且我还希望以一种尽可能具有平台独立性的方式实现这一点(同时假设类型对应于IEEE754 32位浮点值)。是否有某种方法,可能使用,要这样做吗? 我有一个似乎有效的答案,我