微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 c++ 在 cout

如何解决为什么 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 举报,一经查实,本站将立刻删除。