如何解决为什么 c++ 在 cout
我开始学习 cpp 并且正在尝试hackerrank.com上的一些cpp问题作为练习,但我没有使用他们的编译器,但我使用的是visual studio 2019。 问题是 19856.992 打印为 19857,-5279235.721231465 打印为 -5.27924e+06。
代码:
#include<iostream>
int main() {
int intVal;
long long int LongIntVal;
char CharVal;
float FloatVal ;
double DoubleVal;
std::cout << "input: ";
std::cin >> intVal >>LongIntVal>>CharVal>>FloatVal>>DoubleVal;
std::cout << std::endl << intVal << std::endl << LongIntVal << std::endl<< CharVal << std::endl << FloatVal << std::endl << DoubleVal;
return 0;
}
输出:
input: 211916801 97592151379235457 p 19856.992 -5279235.721231465
211916801
97592151379235457
p
19857
-5.27924e+06
解决方法
可以使用iomanip头文件下的std::setprecision()函数
我已经更改了您的代码,以便您可以了解如何使用它:
#include <iostream>
#include <iomanip>
int main()
{
int intVal;
long long int LongIntVal;
char CharVal;
float FloatVal;
double DoubleVal;
std::cout << "input: ";
std::cin >> intVal >> LongIntVal >> CharVal >> FloatVal >> DoubleVal;
std::cout << std::endl
<< intVal << std::endl
<< LongIntVal << std::endl
<< std::setprecision(20) << CharVal << std::endl
<< std::setprecision(20) << FloatVal << std::endl
<< std::setprecision(20) << DoubleVal;
return 0;
}
输出:
input: 211916801 97592151379235457 p 19856.992 -5279235.721231465
211916801
97592151379235457
p
19856.9921875
-5279235.7212314652279
,
我建议你可以通过计算浮点数的小数位并结合函数setprecision
来输出你想要的值。
例如:
int foo(float f)
{
int i = 0;
while (i++,f != (int)f) f *= 10;
return i - 1;
}
int main()
{
float f = 221.444356;
int n = foo(f);
cout << setiosflags(ios::fixed);
std::cout << n << std::endl << std::setprecision(n) << f;
}
输出:
5
221.444356
cout.precision(n)
、setprecision(n)
可以控制输出流中显示的浮点数的个数。 C++默认流输出值有效位为6。
如果 setprecision(n)
与 setiosflags(ios::fixed)
组合,您可以控制小数点右侧的位数。 setiosflags(ios::fixed)
是实数的定点表示。
如果与setiosflags(ios::scientific)
结合,可以控制指数表示中系数小数点后的位数。 setiosflags(ios::scientific)
是实数的指数表示。
如果设置了setprecision(n)
,但没有设置setiosflags(ios::fixed)
,则表示显示常规浮点数时的总位数。
如果设置了setprecision(n)
,但没有设置setiosflags(ios::scientific)
,当浮点数较大时,系统自动显示指数形式,指的是系数的总位数
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。