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

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

Восстановить пароль Регистрация
 
SeeT
 Аватар для SeeT
53 / 23 / 2
Регистрация: 12.10.2012
Сообщений: 132
Записей в блоге: 1
27.08.2013, 13:42     знаки после запятой #1
Здравствуйте, простой вопрос на который я никак не могу найти ответ.
Почему после компиляции, программа отказывается показывать знаки после запятой?
Грешу на тип переменных, но вроде бы все верно. Надеюсь на вашу помощь

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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
solar_wind
 Аватар для solar_wind
740 / 731 / 39
Регистрация: 06.07.2009
Сообщений: 2,937
Завершенные тесты: 1
27.08.2013, 13:45     знаки после запятой #2
Попробуй написать
C++
1
z=(double)x/(double)y;
SeeT
 Аватар для SeeT
53 / 23 / 2
Регистрация: 12.10.2012
Сообщений: 132
Записей в блоге: 1
27.08.2013, 13:46  [ТС]     знаки после запятой #3
О дааа! Работает, отлично! Спасибо большое, добрый человек
solar_wind
 Аватар для solar_wind
740 / 731 / 39
Регистрация: 06.07.2009
Сообщений: 2,937
Завершенные тесты: 1
27.08.2013, 13:53     знаки после запятой #4
SeeT, у тебя просто int делился на int и компилятор автоматически результат записывал в int, и только потом уже этот int запихивал в double, отсюда и потеря данных после запятой.
Герц
523 / 340 / 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;
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
27.08.2013, 14:18     знаки после запятой #6
Всё уже рассказали. Лишь немного дополню:
Си (равно как и Си++) имеет два типа деления - нормальное и целочисленное. Целочисленное - то же нормальное, но после отбрасывается дробная часть. Если хоть один из типов, участвующие в делении - дробное (float или double), то результат тоже дробный, иначе - целочисленный (и остаток отбрасывается).
Цитата Сообщение от Герц Посмотреть сообщение
Два каста ни к чему, достаточно одного, и лучше привыкать к C++ кастам.
В общем-то верно, но во-первых, это разводит неудобную и плохочитаемую простыню. Читаемость на первом месте, имхо. Во-вторых, в данном случае, кастов лучше вообще избегать (завести вместо int'ов - double или float). Наконец, тогда уж надо и инклудить в C++ стиле (никаких *.h), и использовать не STL, а BOOST, и ещё много чего правильного. И вообще - не мешать Си и Си++.
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
27.08.2013, 14:22     знаки после запятой #7
Цитата Сообщение от AnyOne697 Посмотреть сообщение
использовать не STL, а BOOST
как написание программ на С++ противоречит использованию STL?
Герц
523 / 340 / 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 касты обладают меньшей читаемостью и трудно идентифицируются в коде, усложняя восприятие. На счет того что без кастов тут можно было обойтись вообще - разумеется, тут спорить не с чем.
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
28.08.2013, 01:03     знаки после запятой #9
Цитата Сообщение от I.M. Посмотреть сообщение
как написание программ на С++ противоречит использованию STL?
Особо ни чем, но стоит признать ужасную реализаю шаблонов в Си++.
Вообще, я сильно разочаровался в плюсах за последнее время. Много, очень много вещей, которые делаются легко и непринуждённо в современных ЯП, в Си++ требуется городить трудночитаемые простыни кода. В то же вермя, производительность кода, скомпилированного непосредственно под архитектуру, не сильно выше, чем байт-код Java-машины или CIL-код. Более того - средний программист на Java напишет код быстрее и лучше, чем средний программист на Си++. Хоть это и "имхо", но по опыту именно так. Си++ создан для машины, под машину, Java (C#, Python) - для программистов.

Добавлено через 2 минуты
Цитата Сообщение от Герц Посмотреть сообщение
Это уже максимализм, в C++ Standard Library (не STL) перекочевывают нововведения из Boost, и использовать последний вовсе не требуется в рядовых задачах. С появлением в стандартной библиотеке средств для работы с датами, временем, многопоточным программированием, регулярными выражениями и прочими вещами отпала необходимость в Boost во многих задачах.
Си++11 сегодня поддерживается не всеми компиляторами. Да и BOOST использовать далеко не так удобно, как хотелось бы. Вообще, программирование на Си++ требует огромного опыта, порог вхождения в него слишком высок, чтобы начинать с него. Вот что я понял.
Герц
523 / 340 / 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 полностью поддерживают стандарт.
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, на неё мелкомягкие банально забили.

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

И последний вопрос - ты на языке то этом разрабатываешь вообще? Спроси людей, реально использующих C++ - нужен ли им GC.
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++, меня охватывает дежавю - ничего не меняется.

ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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
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++
Нам очень важен твой выбор.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.08.2013, 22:42     знаки после запятой
Еще ссылки по теме:

знаки после запятой , формат float C++
C++ При переводе из double в string теряются знаки после запятой
Табуляция и знаки после запятой C++

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

Или воспользуйтесь поиском по форуму:
AnyOne697
28.08.2013, 22:42     знаки после запятой
  #16

Не по теме:

kvadro, вы видимо не читале тред. Без каста обойтись можно, если сразу завести переменные нужного типа. Именно то, STL убога, равно как и Си++ в неумелых руках. Про расширение файла вообще не понял. И что?

Цитата Сообщение от kvadro Посмотреть сообщение
Нам очень важен твой выбор.
Да неужели? Рад за Вас. (если не заметили, то там оффтоп)
Да и вообще, всё это жуткий оффтоп.

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

Текущее время: 17:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru