Как использовать только первые 3 десятичных знака?(C ++) - PullRequest
1 голос
/ 09 сентября 2011

У нас есть школьное задание, и нам сказали, что все числа заканчиваются после третья десятичная цифра, означающая, что 0,0009 - это 0 в нашем случае. Как я могу сделать это в C ++? Должен ли я создать новый класс, используя перегрузку операторов? Спасибо

Ответы [ 5 ]

3 голосов
/ 09 сентября 2011

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

Это поможет сделать код, использующий класс, простым.Вам решать, хотите ли вы приложить усилия для достижения этой простоты.

Как я могу это сделать в c ++?

В C ++ есть способчтобы усечь число с плавающей точкой до нуля десятичных знаков: приведение.

double d1 = 1.34;
double d2 = (int)i; // now d2 is 1

Вы можете использовать это с некоторой математикой для усечения до трех десятичных знаков.

3 голосов
/ 09 сентября 2011

Вы должны быть в состоянии взять свой номер, умножить на 1000, выполнить арифметическую операцию, а затем разделить на 1000.0, чтобы получить свой результат.

((int)(0.0009 * 1000))/1000.0 == 0.0
1 голос
/ 09 сентября 2011

Вы можете использовать целые числа.Возьмите 0,0009 * 1000 = 0,9 и используйте только целую часть, iow 0. В конце вы можете разделить ваш окончательный ответ на 1000?

0 голосов
/ 09 сентября 2011

Для нескольких вычислений не создавайте класс - это усложнит понимание кода (каждый раз, когда вы перегружаете оператор, вы должны учитывать, что будущие пользователи делают ошибки из-за неожиданного поведения). Сказав это, вы можете обойтись без очень простого класса, который просто содержит операторы cast-to-double и assign-from-double вместе с конструктором. Это было бы вполне приемлемо.

#include <cmath>
class Threep
{
   double val;
public:
   Threep(double x) : val(floor(x*1000)/1000) {}
   operator double() { return val; }
   double operator=(double rhs) { val = floor(rhs*1000)/1000; return val;}
   double operator*=(double rhs) { val = floor((val*rhs)*1000)/1000; return val;}
   double operator/=(double rhs) { val = floor((val/rhs)*1000)/1000; return val;}
   double operator+=(double rhs) { val = floor((val+rhs)*1000)/1000; return val;}
   double operator-=(double rhs) { val = floor((val-rhs)*1000)/1000; return val;}
};

Я добавил несколько удобных назначений вместе с оператором =: -)

Этот код не проверен, но, на мой взгляд, выглядит хорошо.

0 голосов
/ 09 сентября 2011

Для печати я не думаю, что понадобится новый класс, вы можете округлить их. используйте printf ("%. 3f",);

См. Это: Округление числа до 2 десятичных знаков в C

Для использования в расчетах см .: http://www.daniweb.com/software-development/cpp/threads/184830

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