gpt4 book ai didi

c++ - 打印到 cout 时舍入双数

转载 作者:太空狗 更新时间:2023-10-29 21:45:48 25 4
gpt4 key购买 nike

我只想打印小数点后的一位数字。

所以我写:

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.00.0)。我应该如何更改我的代码,在 -0.0 的情况下,它将打印 0.0

关于第二行,为什么不打印0.0(或-0.0)?

感谢任何帮助!

最佳答案

为了打印 float ,如果它们大于或等于两个可能输出的“中间值”,它们将被四舍五入,所以 -0.05 故意变成了 -0.0 .

如果负数向上舍入为零,则结果为负零,这也是有意为之的。内部浮点格式 (IEEE 754) 区分负零和正零 ( see this link ),C++ 输出流似乎坚持这种行为。

您可以通过分开打印 float 的符号和绝对值来解决这两个问题。

cout << (number <= -.05 ? "-" : "") << abs(number);

比较说明:对于等于或小于-0.05的数字,四舍五入abs(number)(然后是>= 0.05) 将是非零的,所以只有到那时你才希望符号出现。

请注意,此比较中的阈值取决于您选择的输出格式。因此,您应该在您的代码中尽可能将此打印方法保留在本地,您知道要打印 float 指针的确切格式。

Live example

注意:floatdouble 在这些点上的行为完全相同。

关于c++ - 打印到 cout 时舍入双数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16748818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com