c++ - 如何使用 std::to_string 函数将 float 格式化为“x.0”
问题描述
我正在使用 std::to_string 函数将浮点数转换为字符串。
float number = 30.0f; // this number will vary
当我将浮点数转换为字符串时
std::to_string(number);
std::cout 将结果显示为 30.000000
我希望结果为 30.0 并删除多余的零。
解决方案
std::to_string
不支持这一点,实际上对于任意浮点值通常不是很好。
由于您的问题被标记为c++11,因此我知道有两种方法。首先,你有std::stringstream
,它是类型安全的,可以使用任意类型:
#include <sstream>
// ...
float number = 30.0f;
std::ostringstream oss;
oss << std::setprecision(1) << number;
std::string result = oss.str();
或者,您有std::snprintf
,这需要通过char
给定大小的缓冲区进行转换:
float number = 30.0f;
char buffer[20]; // maximum expected length of the float
std::snprintf(buffer, 20, "%.1f", number);
std::string str(buffer);
从 C++17 开始,您可以使用std::to_chars
与 类似的方式std::snprintf
,而从 C++20 开始,您可以使用std::format
.
推荐阅读
- rabbitmq - Spring AMQP RabbitMQ RPC - 处理响应异常
- c# - Azure 服务总线不断抛出 MessageLockLostExceptions
- angular - POST后使用异步可观察的角度刷新ngFor
- javascript - 将数组转换为制表符分隔的 Mailchimp 文件
- ant - 构建失败的 SAP Hybris
- python - Django Forms保存数据的问题
- javascript - Ajax 将布尔值与 HTML 一起从服务器传递到具有 HTML 数据类型的客户端
- java - Java - 循环平均 rgb 值应该是破坏性的......但不是
- java - 多次引用方法时保留变量
- c - 宏for_each_process的内核模块编译错误