Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вычисления float, double 
:(
    Опции темы
lv151
Дата 28.1.2009, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



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


Это сообщение отредактировал(а) lv151 - 28.1.2009, 21:37
PM MAIL   Вверх
Fazil6
Дата 28.1.2009, 21:47 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 7
Всего: 60



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

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

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

PM MAIL   Вверх
stat007
Дата 28.1.2009, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 521
Регистрация: 9.10.2008

Репутация: -2
Всего: -4



Fazil6,  smile  smile 
PM MAIL   Вверх
DragoonFighter
Дата 28.1.2009, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 16.7.2007
Где: Access denied

Репутация: нет
Всего: нет



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

Код

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

--------------------
Зрелость личности - это не когда человек хочет умереть ради кого-то, а когда он хочет жить ради кого-то.
PM MAIL WWW ICQ Skype YIM MSN   Вверх
mes
Дата 28.1.2009, 22:54 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



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

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

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



--------------------
PM MAIL WWW   Вверх
DragoonFighter
Дата 28.1.2009, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 16.7.2007
Где: Access denied

Репутация: нет
Всего: нет



Цитата(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;
             }


Это сообщение отредактировал(а) DragoonFighter - 28.1.2009, 23:13
--------------------
Зрелость личности - это не когда человек хочет умереть ради кого-то, а когда он хочет жить ради кого-то.
PM MAIL WWW ICQ Skype YIM MSN   Вверх
mes
Дата 28.1.2009, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



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

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


--------------------
PM MAIL WWW   Вверх
DragoonFighter
Дата 28.1.2009, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 16.7.2007
Где: Access denied

Репутация: нет
Всего: нет



Цитата(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
--------------------
Зрелость личности - это не когда человек хочет умереть ради кого-то, а когда он хочет жить ради кого-то.
PM MAIL WWW ICQ Skype YIM MSN   Вверх
pan2004
Дата 28.1.2009, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 357
Регистрация: 28.7.2007

Репутация: 2
Всего: 9



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

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


--------------------
Qt4/C++ fan
WinXP SP3: MSVC++2005 Qt4.5.1 Boost1.39
сыграем в дурака?
PM MAIL   Вверх
mes
Дата 28.1.2009, 23:45 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



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

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

Это сообщение отредактировал(а) mes - 28.1.2009, 23:45


--------------------
PM MAIL WWW   Вверх
DragoonFighter
Дата 29.1.2009, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 16.7.2007
Где: Access denied

Репутация: нет
Всего: нет



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

P.S.: Было интересно! Хотя сам автор не отвечает... 
--------------------
Зрелость личности - это не когда человек хочет умереть ради кого-то, а когда он хочет жить ради кого-то.
PM MAIL WWW ICQ Skype YIM MSN   Вверх
math64
Дата 29.1.2009, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Копейки нужно писать двумя цифрами. Не помню как это пишется в 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);
}
}


Это сообщение отредактировал(а) math64 - 29.1.2009, 09:52
PM   Вверх
lv151
Дата 29.1.2009, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



Понял, спасибо.
PM MAIL   Вверх
Alexeis
Дата 29.1.2009, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 4
Всего: 459



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


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
NightmareZ
Дата 3.2.2009, 06:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


[хакер]
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 10.8.2006

Репутация: 0
Всего: 13



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

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


--------------------
NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш
Ely-Art.ru - наша маленькая домашняя арт-студия
mugcraft.ru - кружки на любой вкус
PM WWW ICQ Skype GTalk AOL YIM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0881 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.