删除浮点值c ++的尾随零

时间:2017-04-22 21:53:23

标签: c++ decimal rounding trailing

我正在尝试设置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 个答案:

答案 0 :(得分:1)

目前还不清楚您的API是什么。好像你想要传递C字符串。在这种情况下,只需使用<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Carousel</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> </head> <body> <div class="container"> <div class="row"> <div class="col-sm-12"> <ol class="carousel-indicators"> <li data-target="#newSlider" data-slide-to="0" class="active"></li> <li data-target="#newSlider" data-slide-to="1"></li> </ol> <div id="newSlider" class="carousel slide" data-ride="carousel"> <div class="carousel-inner" role="listbox"> <div class="item active"> <img src="http://www.stockpilingmoms.com/wp-content/uploads/2016/04/15-Earth-Day-Tips-and-Ideas.jpg" alt="aa"> <div class="carousel-caption"> <h1>aa</h1> </div> </div> <div class="item"> <img src="https://s-media-cache-ak0.pinimg.com/736x/0e/ba/fc/0ebafc5f55ba75f0ec7c48c076bb9506.jpg" alt="bb"> <div class="carousel-caption"> <h1>bb</h1> </div> </div> </div> <a class="left carousel-control" href="#newSlider" role="button" data-slide="prev"> <span class="glyphicon glyphicon-chevron-left"></span> </a> <a class="right carousel-control" href="#newSlider" role="button" data-slide="next"> <span class="glyphicon glyphicon-chevron-right"></span> </a> </div> </div> </div> </div> </body> </html>

sprintf

答案 1 :(得分:0)

无论您对它们做什么,浮点值始终具有相同的精度。若要控制文本字符串中的位数,请更改将值转换为文本的方式。在普通的C ++中(即,没有String类型&lt; g&gt;),你可以用流做:

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

在您正在使用的环境中,您必须使用标准流或找出该环境为控制浮点到文本转换所提供的内容。

答案 2 :(得分:0)

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

正如Pete Becker在回答中指出的那样,您无法通过更改temp的值来控制尾随零。您需要在将其转换为String时控制精度,或者进行转换然后调整结果字符串。

如果您阅读了所使用的String类型的文档,可能会有选项执行其中一项或两项;

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

或者您可以使用std::ostrstream来生成std::string中的值,然后使用该值。