kavinderrana121 Ответов: 2

Double * double дает int в качестве вывода в cpp


Я умножения двухспальной тогда почему ответ имеет тип int

Что я уже пробовал:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int t;
    cin>>t;
    while(t--){
        double n=2.00;
        cout<<n*3.00;
    }
}

2 Ответов

Рейтинг:
2

CPallini

Небольшой тест

#include <iostream>
using namespace std;

int main()
{

  double d = 10;
  int i = 10;

  cout << boolalpha;

  cout << ( typeid(d*2) == typeid(double) ) << "\n";
  cout << ( typeid(i*2) == typeid(double) ) << "\n";

  cout << ((d*2)/3) << "\n";
  cout << ((i*2)/3) << "\n";

}

выход:
true
false
6.66667
6


Рейтинг:
1

OriginalGriff

Нет, это не так! :смеяться:
Просто cout по умолчанию использует "неформатированный двойник", который удаляет конечные нули после десятичной точки.
Если вы измените свой код на этот:

while(t--){
    double n=0.2;
    cout<<n*3.00<<"\n";
}

Он напечатает "0.6" t раз.
Вы также можете использовать fixed чтобы "заставить" десятичные знаки:
cout<< fixed <<n*3.00<<"\n";
Что даст вам "6.000000"
Или вы можете объединить его с установкой точности, чтобы дать вам две десятичные цифры:
int main()
{
    cout<<"Hello World";
    int t;
    cin>>t;
    cout.precision(2);
    while(t--){
        double n=2.00;
        cout<< fixed <<n*3.00<<"\n";
    }
    return 0;
}


CPallini

5.