是否可以通过以下方式以科学计数法格式化字符串:
在指数中设置固定位置:1
在尾数中设置固定小数位:0
double number = 123456.789
所以数字应该被格式化
1e+5
我无法为尾数设置 0 个小数点:
cout.precision(0);
cout << scientific << number;
结果:
1.234568e+005
原文由 abcdef 发布,翻译遵循 CC BY-SA 4.0 许可协议
是否可以通过以下方式以科学计数法格式化字符串:
在指数中设置固定位置:1
在尾数中设置固定小数位:0
double number = 123456.789
所以数字应该被格式化
1e+5
我无法为尾数设置 0 个小数点:
cout.precision(0);
cout << scientific << number;
结果:
1.234568e+005
原文由 abcdef 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以使用 {fmt} 格式化库 轻松做到这一点:
#include <fmt/core.h>
double number = 123456.789;
auto s = fmt::format("{:.0e}\n", number); // s == "1e+05"
s.erase(s.size() - 2, 1); // s == "1e+5"
基于此库的格式化工具被提议用于 C++20 中的标准化: P0645 。
免责声明:我是 {fmt} 的作者。
原文由 vitaut 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答1.3k 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
4 回答851 阅读
1 回答926 阅读
1 回答960 阅读
1 回答726 阅读
1 回答826 阅读
我不确定您使用的是哪个 C++ 编译器,它会为您提供 3 位指数——C 和 C++ 标准至少需要 2 位数字,这就是 g++ 所做的。使用标准 C 或 C++ I/O 函数无法只获得一位数,因此您必须推出自己的解决方案。由于进行浮点到字符串的转换是 一个非常棘手的问题[PDF],我强烈建议不要这样做,而是对结果进行后处理。
这是一种方法: