打印时将双数四舍五入
Round a double number when printing to cout
我只想打印小数点后的一位数字。
所以我写:
double number1 = -0.049453;
double number2 = -0.05000;
cout.setf(ios::fixed,ios::floatfield);
cout.precision(1);
cout << number1 << endl;
cout << number2 << endl;
我的输出是:
-0.0
-0.1
我希望第一行是0.0
(因为-0.0
是0.0
)。我应该如何改变我的代码,在-0.0
的情况下,它将打印0.0
?
关于第二行,为什么不打印0.0
(或-0.0
)?
感谢任何帮助!
要打印浮点数,如果它们大于或等于两个可能输出的"中间",则将其四舍五入,因此-0.05
有意变为-0.0
。
负零是指将一个负数四舍五入为零的结果,也是有意为之。内部浮点格式(IEEE 754)区分负零和正零(参见此链接),似乎c++输出流坚持这种行为。
可以通过将符号和浮点数的绝对值分开打印来解决这两个问题。
cout << (number <= -.05 ? "-" : "") << abs(number);
比较说明:对于等于或小于-0.05
的数字,将abs(number)
四舍五入(即>= 0.05
)将是非零的,因此只有在这种情况下您才希望出现符号。
注意,这个比较中的阈值取决于您选择的输出格式。因此,您应该在代码中尽可能地保持这个打印方法的局部化,因为您知道要打印浮点指针的确切格式。
生活例子
注意:float
和double
在这些点上的行为完全相同。
相关文章:
- 如何循环打印顶点结构
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 如何在c++中打印目录
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 在线编译器中的分段C++没有打印消息
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 如何将结构插入到集合中并打印集合的成员
- 在循环C++中指定字符串之后,不会打印该字符串
- 以螺旋方式打印矩阵的程序.(工作不好)
- 从控制台中删除最后打印的元素
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何仅使用对象名称打印特定于对象的成员
- 回溯C++不打印函数,因此文件
- 在一定长度后从数组中打印时缺少整数
- 为什么这个 c++ 代码打印出长度 5,当我打印出字符串时,程序会自动终止?
- 为什么std::cout打印非常小的科学符号值,而不是四舍五入到零
- 以给定精度在给定方向上四舍五入打印双精度
- 打印时将双数四舍五入