Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2013, 20:42   #1
dniks
Пользователь
 
Аватар для dniks
 
Регистрация: 09.03.2013
Сообщений: 10
По умолчанию Перевод дробного числа в денежный формат

/*преобразование числа в денежный формат*/
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
float fNum; // дробное число
int rub; // целая часть числа (рубли)
int kop; // целая часть числа (копейки)
printf("Преобразование числа в денежный формат\n");
printf("Введите число: ");
scanf("%f", &fNum);
rub = (int)fNum;
kop = fNum*100-rub*100;
printf("%2.2f руб. - это %i руб. %i коп.\n", fNum, rub, kop);

return 0;
}
Если я ввожу 15,05 - то ответ 15р 5к(все верно)
а если 16,05 - то выдает 16р 4к
Почему так?
dniks вне форума Ответить с цитированием
Старый 24.03.2013, 21:04   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Вот так пробуйте....
Код:
/*преобразование числа в денежный формат*/
#include <iostream>
#include <cstdio>
#include <stdlib.h>
using namespace std;
int main()
{
double fNum; // дробное число
int rub; // целая часть числа (рубли)
int kop; // целая часть числа (копейки)
system("chcp 1251 > nul");
printf("Преобразование числа в денежный формат\n");
printf("Введите число: ");
scanf("%lf", &fNum);
rub = (int)fNum;
kop = fNum*100-rub*100;
printf("%2.2lf руб. - это %d руб. %d коп.\n", fNum, rub, kop);

return 0;
}
Скрин.jpg
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!

Последний раз редактировалось Bugrimov; 24.03.2013 в 21:09.
Bugrimov вне форума Ответить с цитированием
Старый 24.03.2013, 21:33   #3
dniks
Пользователь
 
Аватар для dniks
 
Регистрация: 09.03.2013
Сообщений: 10
По умолчанию

Спасибо, частично работает.
scanf("%lf", &fNum); - а просто %d почему выдает ошибку...
теперь в другом месте ошибка. 5,05 выдает 5р 4к

Последний раз редактировалось dniks; 24.03.2013 в 21:48.
dniks вне форума Ответить с цитированием
Старый 26.03.2013, 13:03   #4
Fanyuus
Форумчанин
 
Аватар для Fanyuus
 
Регистрация: 07.05.2011
Сообщений: 169
По умолчанию

вариант, который у меня работает.
Код:
#include "stdafx.h"
#include <iostream>
#include <cstdio>
#include <conio.h>
using namespace std;
int main()
{
setlocale(0,"");
double fNum; // дробное число
int rub; // целая часть числа (рубли)
int kop; // целая часть числа (копейки)
printf("Преобразование числа в денежный формат\n");
printf("Введите число: ");
cin >> fNum;
rub = (int)fNum;
kop = (int)(fNum*100)- rub*100;
printf("%2.2lf руб. - это %d руб. %d коп.\n", fNum, rub, kop);
return 0;
}
А ваши коды выдавали мусорные значения.


Вся проблема была в
Код:
scanf("%lf", &fNum);
Поставьте после этой строчки обычный cout, с выводом fNum. Он каким-то магическим образом записывает интовое значение (т.е., вводим 12.08, а на выходе получаем просто 12). Даже когда lf стоит.
вот мне тоже интересно - почему так случилось?
Fanyuus вне форума Ответить с цитированием
Старый 27.03.2013, 14:29   #5
dniks
Пользователь
 
Аватар для dniks
 
Регистрация: 09.03.2013
Сообщений: 10
По умолчанию

код из книги должен работать(опираясь на те знания которые есть*). ну почему то не работает как надо. на калькуляторе(считать) такой ошибки нет куда копейка убегает загадка.
dniks вне форума Ответить с цитированием
Старый 27.03.2013, 14:42   #6
dniks
Пользователь
 
Аватар для dniks
 
Регистрация: 09.03.2013
Сообщений: 10
По умолчанию

/*И так этот вариант работает если есть ошибка буду рад))) типы переменных из книги*/
/*преобразование числа в денежный формат*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
int main()
{
float fnum; // дробное число
int rub; // целая часть числа (рубли)
int kop; // целая часть числа (копейки)
printf("Преобразование числа в денежный формат\n");
printf("Введите число: ");
scanf("%f", &fnum);
rub = (int)fnum;
kop = fnum*100-rub*100+0.005; // вот здесь дописали + 0,005

printf("%2.2f руб. - это %i руб. %i коп.\n", fnum, rub, kop);

return 0;
}

Последний раз редактировалось dniks; 27.03.2013 в 14:51.
dniks вне форума Ответить с цитированием
Старый 27.03.2013, 15:07   #7
Fanyuus
Форумчанин
 
Аватар для Fanyuus
 
Регистрация: 07.05.2011
Сообщений: 169
По умолчанию

А в этом новом варианте у меня всё равно копеек нуль))
Fanyuus вне форума Ответить с цитированием
Старый 27.03.2013, 15:09   #8
Fanyuus
Форумчанин
 
Аватар для Fanyuus
 
Регистрация: 07.05.2011
Сообщений: 169
По умолчанию

Ошибка как и в вашем старом варианте - scanf записывает интовое значение.
Fanyuus вне форума Ответить с цитированием
Старый 28.03.2013, 13:48   #9
dniks
Пользователь
 
Аватар для dniks
 
Регистрация: 09.03.2013
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Fanyuus Посмотреть сообщение
Ошибка как и в вашем старом варианте - scanf записывает интовое значение.
должно ведь float записать. может где неточность.
float fnum; // дробное число
scanf("%f", &fnum); // 5.05
cout << fnum; // 5.05

должно быть только так. я вот не понимаю почему при формуле(высчитывания) мы должны прибавлять 0.005
dniks вне форума Ответить с цитированием
Старый 28.03.2013, 19:48   #10
Fanyuus
Форумчанин
 
Аватар для Fanyuus
 
Регистрация: 07.05.2011
Сообщений: 169
По умолчанию

Должно быть или так у вас есть?
у меня так не есть, а я ваш код копировала)) Вот мне странно.

А 0,005 прибавляют для того, чтобы округлить? - теперь вопрос: округлить что? Наверное, при переводе, чтобы в большую сторону. Только вроде бы надо 0,5., или не надо 0,5... "мой код" работал, тот что выше. Вы его смотрели?
Fanyuus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Денежный формат ячейки по условию alexsampler Microsoft Office Excel 8 19.09.2011 01:55
Перевести число в денежный формат Mirrok Помощь студентам 3 23.06.2011 18:28
Денежный формат a.tryanov Microsoft Office Access 7 21.09.2010 19:27
Преобразование дробного числа в денежный формат. Delphi LinMax Помощь студентам 2 11.06.2010 16:41
Перевод дробного числа в строку пауэрлифтинг Общие вопросы Delphi 2 30.01.2010 20:18