2010-06-14 3 views
4

Я работаю с базовой программой на C++, чтобы определить область и периметр прямоугольника. Моя программа отлично работает для целых чисел, но разваливается, когда я использую любое число с десятичной точкой. У меня создается впечатление, что я что-то оставляю, но поскольку я полный новичок, я понятия не имею, что.Ошибки математики в базовой программе на C++

Ниже источник:

#include <iostream> 

using namespace std; 

int main() 
{ 
    // Declared variables 
int length; // declares variable for length 
int width; // declares variable for width 
int area; // declares variable for area 
int perimeter; // declares variable for perimeter 


    // Statements 
cout << "Enter the length and the width of the rectangle: "; // states what information to enter 
cin >> length >> width; // user input of length and width 
cout << endl; // closes the input 
area = length * width; // calculates area of rectangle 
perimeter = 2 * (length + width); //calculates perimeter of rectangle 
cout << "The area of the rectangle = " << area << " square units." <<endl; // displays the calculation of the area 
cout << "The perimeter of the rectangle = " << perimeter << " units." << endl; // displays the calculation of the perimeter 
system ("pause"); // REMOVE BEFORE RELEASE - testing purposes only 

return 0; 
} 
+2

Если вы не знаете, вы должны нажать на галочку под ответом, который, по вашему мнению, является лучшим. – 2010-06-14 02:27:16

+0

Спасибо. Я не знал этого. –

ответ

2

Изменить все ваши int переменные типа к double или float. Я лично использовал бы double, потому что у них больше точности, чем у float types.

+0

Вы вряд ли заметите дополнительную точность. Например, 'double (1.0) -double (0.9)! = Double (0.1)', как и с поплавками. – MSalters

+1

Я считаю, что вы имеете в виду точность, а не точность. –

0

использование поплавков не Интс целое число (целое) представляет собой целое число, поплавки позволяют знаков после запятой (как двойники)

float length; // declares variable for length 
float width; // declares variable for width 
float area; // declares variable for area 
float perimeter; // declares variable for perimete 
0

Вы определили переменные как целые числа. Вместо этого используйте double.

Кроме того, вы можете посмотреть некоторое форматирование для соиЬ, чтобы определить количество знаков после запятой, которые вы хотите показать, и т.д.

2

INT типа данных обозначает целое число (то есть положительные и отрицательные целые числа, в том числе 0)

Если вы хотите представить десятичные числа, вам нужно будет использовать float.

+0

или двойной для большей точности. :) –

+1

Вы также можете использовать фиксированную точку ... Например, если вы меняете «единицы», например. 'int Milliseconds;' не является float, а представляет собой долю секунды. Как всегда, лучший подход будет зависеть от специфики вашей проблемы. – asveikau

2

Используйте поплавок или двойной тип, как и другие, уже упомянутые.

Но это не так просто. Вам нужно понять, что такое числа с плавающей запятой, и почему (0.1 + 0.1 + 0.1)! = (0.3). Это сложный вопрос, поэтому я даже не буду пытаться объяснить его здесь - просто помните, что float не десятичный, даже если компьютер показывает его вам в виде десятичной дроби.

+0

Спасибо, Майк. Я знаю, что мне нужно вернуться к этому разделу и перечитать. Любые онлайн-источники, о которых вы можете думать, могут объяснить это так, как это имеет смысл? –

+0

@H Bomb1013: Я всегда рекомендую этот ресурс (http://docs.sun.com/source/806-3568/ncg_goldberg.html). Это обязательное чтение, если вы новичок в арифметике с плавающей запятой. – Cam

+0

Спасибо. Я сделаю это для чтения. Тем более, что у меня такое чувство, что это будет повторяющаяся тема. –