如何设置ostream的指数字段的宽度
How to set the width of the exponent field for an ostream?
此代码:
#include <iostream>
int main( int, char **argv )
{
std::cout << 1.23e45 << std::endl;
}
打印
1.23e+045
当使用MS Visual Studio 2003和进行编译时
1.23e+45
在我的Linux机器上。
如何指定指数字段的宽度(以及为什么首先会有差异)?
我认为这在标准操纵器中是不可能的。(如果是的话,我很想被纠正并学习如何)
剩下的唯一选项是自己创建一个streambuf,截取流中的所有指数,手动重新格式化它们,然后将它们传递到底层流。
看起来工作量很大,虽然不是火箭科学,但也不是琐碎的任务。
关于"为什么"的问题:我知道linux将指数定义为最小两位数,我想Windows将其指定为最小三位数?
// on linux
std::cout << std::scientific << 1.23e4 << std::endl
还添加了一个前导零:
1.230000e+04
作为@Pieter答案的后续,我一直在观察运算符内部<lt;(ostream&,双)。实际上,没有字段可以指定指数的重要性或宽度。在窗口上,运算符<lt;前进到sprintf,它也没有指数大小。
反过来,sprintf函数(在Windows上)调用_cfltcvt_l,我们没有该函数的源代码,但其签名不提供指数精度。
我对Linux上的实现一无所知。
查看iomanip标头。它有很多宽度精度等…功能。
相关文章:
- 将数字提高到一个巨大的指数
- 如何安全地将有符号字段从uint32_t提取到有符号数字(int或uint32_t)中
- 如何检查字段中输入的数字是否重复
- 具有7个段显示的数字时钟,带有PIC18F445K22
- 为什么这段代码输出这么多数字
- Visual Studio 2015中的命令参数字段
- 使用指数符号找到数字的主要分解
- C 如何结束一个段循环,该循环添加数字而不使用数字作为触发器来结束循环
- 提升为指数的数字的递归解决方案
- 双到字符串用指数表示的大数字的转换
- 这段代码有什么问题?如果变量是字母,我无法测试名为数字的变量
- 为什么这段代码会给我的数字加一个额外的零
- 为什么这段代码不能正常打印数字?
- 初始化成员函数字段
- 仅需要k位数字时的快速指数运算-续
- FP号码的指数字段不是我预期的,为什么?
- c++在模块间共享数组元素,仅对少数字段具有const性
- 一个数字和字段宽度的格式化输出,C++标准在哪里说明它
- Setw()不影响读取整数字段
- 如何设置ostream的指数字段的宽度