Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
SeeT
53 / 23 / 2
Регистрация: 12.10.2012
Сообщений: 132
Записей в блоге: 1
#1

знаки после запятой - C++

27.08.2013, 13:42. Просмотров 1027. Ответов 15
Метки нет (Все метки)

Здравствуйте, простой вопрос на который я никак не могу найти ответ.
Почему после компиляции, программа отказывается показывать знаки после запятой?
Грешу на тип переменных, но вроде бы все верно. Надеюсь на вашу помощь

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
#include <conio.h>
#include <math.h>
#include <stdlib.h>
 
int x, y;
double z;
 
int main()
{
    x=rand() % 10 +1;
    y=rand() % 10 +1;
    z=x/y;
    cout << x << ":" << y << "=" << z;
 
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.08.2013, 13:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос знаки после запятой (C++):

Табуляция и знаки после запятой - C++
Здравствуйте, помогите пожалуйста. Как сделать так, чтоб программа выводила данные в нормальном виде, То есть одинаковое количество...

Переменная float - знаки после запятой - C++
Итак я задаю какую-либо переменную типа float. Потом, с помощью scanf кладу в эту переменную значение 3.2 (к примеру.) Затем, с помощью...

знаки после запятой , формат float - C++
я вот что делаю: float i = *(float*)0x0000000; приравниваю значение адреса в формате флоат , мне нужно сделать чтобы переменная...

В массиве double обрубаются знаки после запятой - C++
Всем привет и хорошего настроения! Мой вопрос: почему при выводе простого массива, элементы которого типа double, уменьшается количество...

Функция stod отбрасывает знаки после запятой - C++
Добрый день. Подскажите, почему функция stod может отбрасывать все символы после точки? double* OpValue = new double; cout &lt;&lt;...

При переводе из double в string теряются знаки после запятой - C++
Перевожу переменную double в string stringstream sst; string f_str; double f=12345.99; sst &lt;&lt; f; f_str=...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
solar_wind
756 / 747 / 42
Регистрация: 06.07.2009
Сообщений: 2,969
Завершенные тесты: 1
27.08.2013, 13:45 #2
Попробуй написать
C++
1
z=(double)x/(double)y;
1
SeeT
53 / 23 / 2
Регистрация: 12.10.2012
Сообщений: 132
Записей в блоге: 1
27.08.2013, 13:46  [ТС] #3
О дааа! Работает, отлично! Спасибо большое, добрый человек
0
solar_wind
756 / 747 / 42
Регистрация: 06.07.2009
Сообщений: 2,969
Завершенные тесты: 1
27.08.2013, 13:53 #4
SeeT, у тебя просто int делился на int и компилятор автоматически результат записывал в int, и только потом уже этот int запихивал в double, отсюда и потеря данных после запятой.
0
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
27.08.2013, 14:07 #5
Цитата Сообщение от solar_wind Посмотреть сообщение
Попробуй написать
C++
1
z=(double)x/(double)y;
Два каста ни к чему, достаточно одного, и лучше привыкать к C++ кастам.
C++
1
z = static_cast<double>(x) / y;
1
AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 533
27.08.2013, 14:18 #6
Всё уже рассказали. Лишь немного дополню:
Си (равно как и Си++) имеет два типа деления - нормальное и целочисленное. Целочисленное - то же нормальное, но после отбрасывается дробная часть. Если хоть один из типов, участвующие в делении - дробное (float или double), то результат тоже дробный, иначе - целочисленный (и остаток отбрасывается).
Цитата Сообщение от Герц Посмотреть сообщение
Два каста ни к чему, достаточно одного, и лучше привыкать к C++ кастам.
В общем-то верно, но во-первых, это разводит неудобную и плохочитаемую простыню. Читаемость на первом месте, имхо. Во-вторых, в данном случае, кастов лучше вообще избегать (завести вместо int'ов - double или float). Наконец, тогда уж надо и инклудить в C++ стиле (никаких *.h), и использовать не STL, а BOOST, и ещё много чего правильного. И вообще - не мешать Си и Си++.
0
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
27.08.2013, 14:22 #7
Цитата Сообщение от AnyOne697 Посмотреть сообщение
использовать не STL, а BOOST
как написание программ на С++ противоречит использованию STL?
0
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
27.08.2013, 14:30 #8
Это уже максимализм, в C++ Standard Library (не STL) перекочевывают нововведения из Boost, и использовать последний вовсе не требуется в рядовых задачах. С появлением в стандартной библиотеке средств для работы с датами, временем, многопоточным программированием, регулярными выражениями и прочими вещами отпала необходимость в Boost во многих задачах.
В C++ Standard Library, по-видимому, нет ни одного заголовка с расширением *.hpp, везде использует *.h. Вопрос расширения для файла не имеет никакого отношения к Coding Conventions языка.
C-style касты обладают меньшей читаемостью и трудно идентифицируются в коде, усложняя восприятие. На счет того что без кастов тут можно было обойтись вообще - разумеется, тут спорить не с чем.
0
AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 533
28.08.2013, 01:03 #9
Цитата Сообщение от I.M. Посмотреть сообщение
как написание программ на С++ противоречит использованию STL?
Особо ни чем, но стоит признать ужасную реализаю шаблонов в Си++.
Вообще, я сильно разочаровался в плюсах за последнее время. Много, очень много вещей, которые делаются легко и непринуждённо в современных ЯП, в Си++ требуется городить трудночитаемые простыни кода. В то же вермя, производительность кода, скомпилированного непосредственно под архитектуру, не сильно выше, чем байт-код Java-машины или CIL-код. Более того - средний программист на Java напишет код быстрее и лучше, чем средний программист на Си++. Хоть это и "имхо", но по опыту именно так. Си++ создан для машины, под машину, Java (C#, Python) - для программистов.

Добавлено через 2 минуты
Цитата Сообщение от Герц Посмотреть сообщение
Это уже максимализм, в C++ Standard Library (не STL) перекочевывают нововведения из Boost, и использовать последний вовсе не требуется в рядовых задачах. С появлением в стандартной библиотеке средств для работы с датами, временем, многопоточным программированием, регулярными выражениями и прочими вещами отпала необходимость в Boost во многих задачах.
Си++11 сегодня поддерживается не всеми компиляторами. Да и BOOST использовать далеко не так удобно, как хотелось бы. Вообще, программирование на Си++ требует огромного опыта, порог вхождения в него слишком высок, чтобы начинать с него. Вот что я понял.
0
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
28.08.2013, 12:21 #10
Си++11 сегодня поддерживается не всеми компиляторами. Да и BOOST использовать далеко не так удобно, как хотелось бы. Вообще, программирование на Си++ требует огромного опыта, порог вхождения в него слишком высок, чтобы начинать с него. Вот что я понял.
Это какими же, Visual C++ 2010 и ниже чтоли? Какие могут быть проблемы, если есть свободно распространяемые G++ и Clang, полностью поддерживающие текущий стандарт? Если твой компилятор не поддерживает C++11, то на сегодняшний день это уже твой косяк (на дворе середина 2013 года, и названные компиляторы уже даже исправления C++14 частично поддерживают). Даже тулчейны для Android и iOS полностью поддерживают стандарт.
0
AnyOne697
28.08.2013, 12:28
  #11

Не по теме:

Цитата Сообщение от Герц Посмотреть сообщение
Это какими же, Visual C++ 2010 и ниже чтоли? Какие могут быть проблемы, если есть свободно распространяемые G++ и Clang, полностью поддерживающие текущий стандарт?
Visual C++ 2010 тот же самый. Самая нормальная студия, а ставить туда новый компилятор тот ещё гемор.
Но это так, к слову. Тем более, gcc не полностью поддерживает стандарт - самого главного нет - garbage collector'а, да и поддержка сугубо экспериментальная - по дефолту выключена. Я лишь попробовав баг нашёл. С clang ещё хуже. Так что не надо разводить. Я уже молчу про Visual C++, в Visual C до сих пор нет поддержки C'99, на неё мелкомягкие банально забили.

0
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
28.08.2013, 12:40 #12
GC не являются обязательной частью стандарта, слова "minimal support" тебе ни о чем не говорят?
А по ссылке то ты, собственно, ходил? Что там "еще хуже"?

И последний вопрос - ты на языке то этом разрабатываешь вообще? Спроси людей, реально использующих C++ - нужен ли им GC.
0
AnyOne697
28.08.2013, 12:53
  #13

Не по теме:

Цитата Сообщение от Герц Посмотреть сообщение
GC не являются обязательной частью стандарта, слова "minimal support" тебе ни о чем не говорят?
А по ссылке то ты, собственно, ходил? Что там "еще хуже"?
Разрабатываю. Но C++11 пока не использую.
Minimal Support значит, что требуется минимальная поддержка gc, то есть не такой крутой и продвинутый, как в java, с отдельными потоками и прочим "непотребством". Вообще забавно было проследить, как коммитет думал, нужен ли GC. Сначала подумали, что нужен. Потом ещё раз подумали и сказали - нет, не будет, используйте фреймворки. Потом ещё раз подумали, и решили, что было бы не плохо, но не решились. Под конец, отвязались этим самым minimal support. А ещё они рефлексию забраковали. Хотя я точно и не понимаю, что значит этот minimal support, а ещё странно то, что ни gnu этого не реализовала, ни в clang'е этого не встретишь...

Вообще, если так будет дальше, я полностью откажусь от C++. Когда я искусил C#, я понял, что такое любовь. Когда я искусил Java, я понял, что такое нирвана. Когда я возвращаюсь к C++, меня охватывает дежавю - ничего не меняется.

0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
28.08.2013, 12:56 #14
Цитата Сообщение от AnyOne697 Посмотреть сообщение
Minimal Support значит, что требуется минимальная поддержка gc, то есть не такой крутой и продвинутый, как в java, с отдельными потоками и прочим "непотребством". Вообще забавно было проследить, как коммитет думал, нужен ли GC. Сначала подумали, что нужен. Потом ещё раз подумали и сказали - нет, не будет, используйте фреймворки. Потом ещё раз подумали, и решили, что было бы не плохо, но не решились
Вы бы proposal прочитали б что-ли... http://www.open-std.org/jtc1/sc22/wg...2008/n2670.htm
1
kvadro
11 / 9 / 1
Регистрация: 12.03.2012
Сообщений: 127
28.08.2013, 15:43 #15
В общем-то верно, но во-первых, это разводит неудобную и плохочитаемую простыню.
C++
1
z=double( x )/ y; // C++ каст
в данном случае, кастов лучше вообще избегать
Что?

и использовать не STL, а BOOST
Что?

Вопрос расширения для файла не имеет никакого отношения к Coding Conventions языка.
Насколько я помню хотели сделать ".hpp", но пока комитет это бы одобрил прошли десятки лет, так что осталось как осталось - C заголовки имеют формат ".h", C++ заголовочные файлы вообще не имеют формата.

Много, очень много вещей, которые делаются легко и непринуждённо в современных ЯП, в Си++ требуется городить трудночитаемые простыни кода.
К примеру?

уже твой косяк


Вообще, если так будет дальше, я полностью откажусь от C++
Нам очень важен твой выбор.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.08.2013, 15:43
Привет! Вот еще темы с ответами:

В строке имеется одна точка с запятой (;). Подсчитать количество символов до точки с запятой и после нее. - C++
В строке имеется одна точка с запятой ( ; ). Подсчитать количество символов до точки с запятой и после нее.

Почему после 51-го знака после запятой выводятся одни нули? - C++
В продолжение темы: тот же код, только с увеличенным количеством знаков после запятой: #include &lt;iostream&gt; #include &lt;windows.h&gt;...

Цифры после запятой - C++
Уважаемые форумчаны, начал изучать С++, и вот столкнулся с такой проблемой: как отформатировать вывод вещественных чисел при помощи...

нули после запятой - C++
Остаток на начало месяца Сумма всех элементов взимается этого клиента в этом месяце Сумма всех кредитов применяются на счет этого...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.08.2013, 15:43
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru