![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 08.09.2009
Сообщений: 28
|
![]()
Доброго времени суток таварищи!
Значит возникло у меня несколько вопрос . 1.В моём самоучителе написано что тип переменных с плавающей запятой не точный и его лучше не использовать, а для расчёта денег так и подавно. Не могу понять почему и какие тогда типы использовать чтобы оперировать с дробными. 2.Не смог понять как правильно выводить переменные носящией в себе числа с плавающей запятой(на сколько я понимаю плавающая запятая имееться в виду обычные дробные?) Вот например cout << "Среднее значение равно" << setprecision(2) << satiosflag (ios::fixed | ios::showpoint) << peremennaia << endl; Обьясните плиз по подробней этот момент. |
![]() |
![]() |
![]() |
#2 | |
Форумчанин
Регистрация: 11.08.2009
Сообщений: 433
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
![]()
1) Плавающая точка/запятая - это представление числа в стандартной форме (aka научной нотации): задаются отдельно первые значащие цифры, отдельно - порядок числа. Например, не 0.00012, а 1,2*10^-4 (1,2 умножить на 10 в степени -4). Потому и "плавающая точка", что первая значащая цифра может быть в любой позиции. Под словом float понимают как вообще подобное представление числа, так и конкретный тип переменной, занимающей 4 байта. Есть еще тип double, занимающий 8 байт, и дающий двойную точность и больший диапазон значений (у float это 10 в степени +/- 38, у double - в степени 308). Возможно, это ошибка переводчика, который не понял, что речь идет о типе переменной. Кстати, иногда float для определенности называют single (в противоположность double).
Общий совет - используй float, когда речь идет не о деньгах и не о моделировании физических процессов (в некоторых формулах физики полупроводников я видел выражение h^(-3), что равно 10e+100). 2) Если ты только начинаешь изучать C++, то формы cout << "Среднее значение равно" << peremennaia << endl; тебе хватит выше крыши. Когда понадобится изменить кол-во цифр после запятой, или как-то еще изменить способ вывода - обращайся к справочникам. Лично я предпочитаю Герберт Шилдт - "Самоучитель C++" (нихрена он не самоучитель, обычный справочник). Последний раз редактировалось ds.Dante; 17.09.2009 в 10:42. |
![]() |
![]() |
![]() |
#4 | ||
Старожил
Регистрация: 22.05.2007
Сообщений: 9,087
|
![]() Цитата:
1/3 может храниться как: 0.333333333332, а 2/6 как: 0.333333333334. А эти два числа не равны. Опять же 1/3 != (1/3)*2/2. Особенности вычислений чисел с плавающей точкой. Если в float записать, например, 100 миллионов и потом к этому числу прибавить единицу, то так и останется 100 миллионов. Деньги в float и double лучше не хранить, а то потом копейки "улетать" в никуда будут. Надёжнее хранить к обычном int, __int64 в копейках, чтобы не было дробей. Уж пол копейки никак не получится ![]() Цитата:
setiosflag устанавливает флаги вывода. ios::fixed - вещественное число выведется как число с фиксированной точкой, а не в виде: 1.33E10 ios::showpoint - выведется десятичная точка-разделитель целой и дробной частей Как то вот так в общем |
||
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
![]()
Обычно на компьютере деньги считают, ну, там, полпроцента добавить. Вот тут-то как раз чем выше точность дроби, тем лучше, для этого в C# добавили тип decimal. Кстати, первое в истории компьютерное правонарушение связано с тем, что программист сделал в банковской базе данных округление до центов в меньшую сторону, а разницу перечислял на свой счет.
|
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 08.09.2009
Сообщений: 28
|
![]()
Спасибо большое. Очень помогло. Единственное что осталься вопрос, а числа с фиксированой точкой также нужно использовать float, double?? А на счёт того что для денег использовать int, тоесть все деньги изображать в виде копеек например 2.55 = 255 копеек?
А и еще столкнулся с операцией :? что она делает? |
![]() |
![]() |
![]() |
#7 | ||
Старожил
Регистрация: 22.05.2007
Сообщений: 9,087
|
![]() Цитата:
Цитата:
![]() а : b ? c; если а, то b, иначе c. int a = flag : 10 ? -10; если flag истина, то a = 10, если же flag - ложь, то a = -10. В общем, это краткая форма записи if/else. |
||
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 08.09.2009
Сообщений: 28
|
![]()
Спасибо за ообьяснение!
|
![]() |
![]() |
![]() |
#9 | |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,087
|
![]()
Извиняюсь. Я этой операцией прост уже миллион лет не пользовался, в каком порядке ТС их написал, так я и намалевал
![]() |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Имеется список,элементами которого являются вещественные числа.Создать консольное приложение,описывающее | Smart | Помощь студентам | 1 | 06.05.2008 08:09 |