Почему добавление двух чисел с плавающей точкой дает целое число в C ++? - PullRequest
0 голосов
/ 18 января 2020

Я пытался вычислить сумму двух чисел с плавающей запятой 6.5 и 7.5 в C ++. Я ожидал, что результатом будет плавающее число с десятичными знаками типа 14.000000. Но он дал ответ 14 и целое число без десятичных дробей.

Может кто-нибудь объяснить, что происходит?

#include <iostream.h>
int main ()
{     
  float number1, number2;
  sum,average;
   cout<<"Enter 2 numbers";
   cout<<"number1=";
   cin>>number1;
   cout<<"number2=";
  cin>>"number2;
  sum = numberl+number2;
  average=sum/2;
  cout << "sum=" <<sum ;
   cout << "Average = " << average;
  return 0;
 }

Вывод:

Enter 2 numbers: 6.5 7.5
Sum=14
Average=7

Ответы [ 3 ]

2 голосов
/ 18 января 2020
float number1, number2;
  sum,average;

Странный момент. Похоже, вторая строка - это объявление двух переменных типа int. Это на самом деле не должно работать, но в соответствии с вашим текстом кажется, что это работает. Также вы используете очень старый компилятор.

Исправление простое: либо добавьте float:

float number1, number2;
float sum, average;

, либо замените точку с запятой запятой:

float number1, number2, sum, average;

Также я хотел бы сказать, что лучше использовать double, чем float.

1 голос
/ 18 января 2020

Я думаю, что этот код не компилируется ни на старых компиляторах, ни на новых, так как в этой строке есть недопустимая двойная кавычка:

cin>>"number2;

Поскольку есть опечатки, не ясно если это оригинальный код, но эта строка:

sum,average;

должна привести к ошибке компиляции, так как вы используете неопределенные переменные. Грамматика K &> R для старых C компиляторов позволяла объявлять функцию без типа, что означало int. Но это было только для функций. Переменные должны иметь хотя бы один спецификатор типа.

Предполагая, что была опечатка и что последний символ предыдущей строки был ,, а не ;, переменные были бы float, каково ваше ожидание.

Наконец, с исправленными опечатками кажется, что это только проблема форматирования . Форматирование по умолчанию для плавающей запятой в C ++ заключается в использовании целочисленного формата, если значение не имеет значащих десятичных знаков.

Вы можете использовать десятичное представление:

  • с cout<<showpoint<<sum<<endl;
  • с cout<<fixed<<sum<<endl;.
  • или с scientific презентация, но она будет отображаться как 1.4e + 01
0 голосов
/ 18 января 2020

Выход «14» не является числом с плавающей точкой или целочисленным типом. Это символьный текст. Это не означает, что значение, используемое с cout << sum, имело какой-либо конкретный тип.

Причина, по которой при добавлении 6.5 и 7.5 получен целочисленный результат, заключается в том, что математический результат равен 14, а 14 - целое число. Типы с плавающей точкой могут представлять целые числа. Когда вы выводите это значение с помощью cout << sum, форматирование по умолчанию создает текст «14».

Чтобы указать потоку показывать десятичную точку и конечные нули для выходных данных с плавающей запятой, вставьте cout.setf(ios_base::showpoint); в код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...