C++ 将浮点数格式化为具有可选小数点的有限大小的字符数组
我需要把浮点数打印成固定的字符数。这在严格基于文本的数据协议中使用(是的,我知道)。小数包含在字符计数中。忽略空终止符。没有最小填充要求。十进制精度可以是0到(缓冲区大小-2),而实数的最大数量可以是0到缓冲区大小。最小值和最大值夹紧以防止真正超出范围的数字从外部处理此问题 假设缓冲区大小为6,最小值和最大值为(0.0001和999999)的示例: 起初的 缓冲区(6个字符) 笔记 12445.11897784 12445 只保留5个数字,因为没有小数+值的空间 8846.51548 8846.5 4.54631888315 4.5463 7651 7651 0.87457 .87457 0.8746也可以接受C++ 将浮点数格式化为具有可选小数点的有限大小的字符数组,c++,formatting,c++17,C++,Formatting,C++17,我需要把浮点数打印成固定的字符数。这在严格基于文本的数据协议中使用(是的,我知道)。小数包含在字符计数中。忽略空终止符。没有最小填充要求。十进制精度可以是0到(缓冲区大小-2),而实数的最大数量可以是0到缓冲区大小。最小值和最大值夹紧以防止真正超出范围的数字从外部处理此问题 假设缓冲区大小为6,最小值和最大值为(0.0001和999999)的示例: 起初的 缓冲区(6个字符) 笔记 12445.11897784 12445 只保留5个数字,因为没有小数+值的空间 8846.51548 8846.
看起来很简单:
%.0f
%.1f
%.2f
%.3f
%.5f
%.5f
< P> C++。在打印后,在字符串中正确地舍入数字,而不是在打印之前,这样就可以防止在转换为字符串时改变任何数量的字符串。 < P>这里是C++ 17版本:
#include <iostream>
#include <charconv>
std::string to6(float f) {
std::string s;
s.resize(10);
auto ec = std::to_chars(s.data(), s.data() + s.size(), f, std::chars_format::fixed);
s.resize(6);
if (s.back() == '.')
s.resize(5);
return s;
}
int main()
{
std::cout << to6(12445.11897784) << std::endl;
std::cout << to6(8846.51548) << std::endl;
std::cout << to6(4.54631888315) << std::endl;
std::cout << to6(7651) << std::endl;
std::cout << to6(0.87457) << std::endl;
return 0;
}
#包括
#包括
标准::字符串到6(浮点f){
std::字符串s;
s、 调整大小(10);
自动ec=std::to_字符(s.data(),s.data()+s.size(),f,std::chars_格式::固定);
s、 调整大小(6);
如果(s.back()=='。)
s、 调整大小(5);
返回s;
}
int main()
{
STD::代码< >我理解不完整?<代码>什么是你的理解?考虑代码> SNPrTNFF <代码> >代码> C++ 17中的任何实用工具< /代码>你是在寻找实用程序还是想解决你的问题?