C++,科学计数法,格式编号
是否可以通过以下方式以科学记数法格式化字符串:
在指数中设置固定位置:1
在尾数中设置固定小数位:0
双数 = 123456.789
因此,应该格式化数字
1e+5
我无法为尾数设置 0 小数点:
cout.precision(0);
cout << scientific << number;
结果:
1.234568e+005
Is it possible to format string in scientific notation in the following ways:
set fixed places in exponent: 1
set fixed decimal places in mantissa: 0
double number = 123456.789
So the number should be formated
1e+5
I am not able to set 0 decimal points for mantissa:
cout.precision(0);
cout << scientific << number;
result:
1.234568e+005
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您可以使用 C++20
std::format
:
在
std::format
广泛使用之前,您可以使用 {fmt}库,std::format
基于:免责声明:我是 {fmt} 和 C++20
std:: 的作者格式
。You can do it with C++20
std::format
:Until
std::format
is widely available you can use the {fmt} library,std::format
is based on:Disclaimer: I'm the author of {fmt} and C++20
std::format
.我不知道如何在指数字段中获取单个数字,但以下内容符合您的所有其他要求。
输出:
编辑:
快速搜索了标准(N3291),但找不到任何关于使用科学记数法时指数字段中的位数的内容。这可能是实现定义的。
I can't figure out how to get a single digit in the exponent field but the following matches all your other requirements.
Output:
EDIT:
Did a quick search through the standard (N3291) and couldn't find anything that talked about the number of digits in the exponent field when using scientific notation. This might be implementation defined.
我不确定您使用的 C++ 编译器会为您提供 3 位指数 - C 和 C++ 标准要求至少 2 位数字,而这正是 g++ 所做的。使用标准 C 或 C++ I/O 函数无法仅获取一位数字,因此您必须推出自己的解决方案。由于进行浮点到字符串转换是一个非常棘手的问题 [PDF],我强烈建议不要这样做,而是对结果进行后处理。
这是一种方法:
I'm not sure what C++ compiler you're using that's giving you 3 digits for the exponent—the C and C++ standards require a minimum of 2 digits for that, and that's what g++ does. There's no way to get only one digit using the standard C or C++ I/O functions, so you'll have to roll your own solution. Since doing a floating-point to string conversion is a very tricky problem [PDF], I'd strongly recommend not doing that and postprocessing the result instead.
Here's one way to do that:
一旦你有了一个字符串,你实际上可以格式化任何东西。更多的 C++ 代码如下所示:
输出:
你可以在 expSize 中设置指数大小,这适用于任意大指数。
希望有帮助!
You can actualy format anything once you have a string.. more c++ code would look like:
Output:
You can set exponent size in expSize and this works for arbitrary large exponent.
Hope it helps!
这是一个流解决方案:
使用示例:
输出:
1.2e0 1.234e0
Here is a stream solution:
Usage sample:
Output:
1.2e0 1.234e0