为什么C++不返回双打?

Why doesn't C++ return a double on division?

本文关键字:返回 C++ 为什么      更新时间:2023-10-16

我正在尝试除两个整数,并希望得到双倍的确切答案。我的代码可以很好地处理小值:

#include<iostream>
using namespace std;
int main()
{
    int max = 100;
    int min = 10;
    int n = 8;
    double gap = (max-min)/(double)(n-1);
    cout<<gap<<endl;
}

打印12.8571

但是当我运行这个:

#include<iostream>
using namespace std;
int main()
{
    int max = 99404748;
    int min = 925679;
    int n = 240;
    double gap = (max-min)/(double)(n-1);
    cout<<gap<<endl;
}

打印412046,而实际答案是412046.3138

这种行为的原因是什么?另外,我该如何修复它?

所有的double值都很好。您看到的结果只是它在std::ostream中如何表示的问题。

使用fixedsetprecision() I/O操纵符来改变表示的行为:

#include<iostream>
#include <iomanip>
using namespace std;
int main()
{
    int max = 99404748;
    int min = 925679;
    int n = 240;
    double gap = (max-min)/(double)(n-1);
    cout << fixed << setprecision(4) <<gap<<endl;
         // ^^^^^    ^^^^^^^^^^^^^^^
}

现场演示