Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > вычисления float, double


Автор: lv151 28.1.2009, 21:36
"Как программировать на С", с 137. Дан совет не использовать double и float для вычислений, связанных с денежными суммами, а использовать целые числа для этих операций, но пример этого где-то в упражнениях, не могу найти.  Кто-нибудь может привести пример?

Автор: Fazil6 28.1.2009, 21:47
Цитата(lv151 @  28.1.2009,  21:36 Найти цитируемый пост)
Кто-нибудь может привести пример?

пример чего? 
Код

int my = 100; // у меня было 100 рублей
my = my + 50; // шел по улице, нашел полтиник. теперь у меня 150 р

Автор: stat007 28.1.2009, 21:49
Fazil6,  smile  smile 

Автор: DragoonFighter 28.1.2009, 22:27
Если вам не нужно работать с double, то работайте с int:

Код

int r = 100; // были 100 рублей
int k = 50; // и 50 копеек
...
cout << "У меня " << r << "." << k << " Рублей" << endl;

Автор: mes 28.1.2009, 22:54
Цитата(DragoonFighter @  28.1.2009,  21:27 Найти цитируемый пост)
int r = 100; // были 100 рублей
int k = 50; // и 50 копеек

а так не надежней ?
Код

int k =10050;
cout << "У меня " << k/100 << "." << k%100 << " Рублей" << endl;

Автор: DragoonFighter 28.1.2009, 23:13
Цитата(mes @ 28.1.2009,  22:54)
Цитата(DragoonFighter @  28.1.2009,  21:27 Найти цитируемый пост)
int r = 100; // были 100 рублей
int k = 50; // и 50 копеек

а так не надежней ?
Код

int k =10050;
cout << "У меня " << k/100 << "." << k%100 << " Рублей" << endl;

Да, так лучше, но смотря для чего это нужно, если создать книгу записей, и каждый день закидывать разные суммы, например то 10 с лишним то 1000 с лишним рублей, то лучше вводить отдельно, или:

Код

int k;
cin >> k;
if((k > 10000) && (k < 100000)) {
             cout << "У меня " << k/100 << "." << k%100 << " Рублей" << endl;
             }
if((k > 100000) && (k < 1000000)) {
             cout << "У меня " << k/1000 << "." << k%1000 << " Рублей" << endl;
             }

Автор: mes 28.1.2009, 23:32
Цитата(DragoonFighter @  28.1.2009,  22:13 Найти цитируемый пост)
if((k > 10000) && (k < 100000)) {

пример не понят...

Автор: DragoonFighter 28.1.2009, 23:42
Цитата(mes @ 28.1.2009,  23:32)
Цитата(DragoonFighter @  28.1.2009,  22:13 Найти цитируемый пост)
if((k > 10000) && (k < 100000)) {

пример не понят...

Цитата

int k =10050;
cout << "У меня " << k/100 << "." << k%100 << " Рублей" << endl;


Пример в том что ваш пример работает только если у нас 100 рублей и 50 копеек, а если у нас 1000 рублей и 50 копеек то нужно делить на 1000 а не на 100. Поэтому если я имею 100 рублей сегодня, то в программке пишу 100 а если завтра 1000 то пишу 1000 (с копейками).

if(рублей больше чем 100) то разделить на 100
if(рублей больше чем 1000) то разделить на 1000

Автор: pan2004 28.1.2009, 23:44
Цитата(DragoonFighter @  28.1.2009,  23:42 Найти цитируемый пост)
 а если у нас 1000 рублей и 50 копеек то нужно делить на 1000 а не на 100.

Действительно? smile 

Автор: mes 28.1.2009, 23:45
Цитата(DragoonFighter @  28.1.2009,  22:42 Найти цитируемый пост)
Пример в том что ваш пример работает только если у нас 100 рублей и 50 копеек,а если у нас  

неа.. всегда одинаково.
в переменной k, мы храним валюту в копейках, для этого рубли умножаем на 100 и прибавляем копейки.
а для вывода наоборот, все копейки делим на 100 и получаем кол-во целых рублей, ну а остаток -оставшиеся копейки smile

Автор: DragoonFighter 29.1.2009, 00:31
Ай тфу блин, жопой подумал, извините!  smile  Ладна, думать мне уже нельзя, пора спать.
Всем пока! 

P.S.: Было интересно! Хотя сам автор не отвечает... 

Автор: math64 29.1.2009, 09:51
Копейки нужно писать двумя цифрами. Не помню как это пишется в iostrem, в stdio:
Код

class Rubli {
public:
int value;
Rubli(int v) { value = v; }
void print() {
int v = value;
if (v < 0) {
  printf("Долг ");
  v = -v;
}
if (v > 100000)
  printf ("%d %03d рублей %02d копеек", v/100000, v/100%1000, v%100);
else
  printf ("%d рублей %02d копеек", v/100, v%100);
}
}

Автор: lv151 29.1.2009, 10:17
Понял, спасибо.

Автор: Alexeis 29.1.2009, 11:26
  Понимаю что не С, но так к сведению в С++ Builder есть двоично десятичный тип Currency, в котором числа представлены как xxxxxxx.xx т.е. он тип с фиксированной точкой, который не теряет точности. Специально для финансовых вычислений.

Автор: NightmareZ 3.2.2009, 06:21
Цитата(lv151 @ 28.1.2009,  21:36)
"Как программировать на С", с 137. Дан совет не использовать double и float для вычислений, связанных с денежными суммами, а использовать целые числа для этих операций, но пример этого где-то в упражнениях, не могу найти.  Кто-нибудь может привести пример?

Пример чего? Храни не рубли, а копейки - float и double не понадобятся.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)