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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.83
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
#1

float обнуляет дробную часть - C++

12.08.2010, 02:43. Просмотров 2536. Ответов 13
Метки нет (Все метки)

Здравствуйте всем!
Я новичок. Поиском не нашел ничего подобного.

Проблема в следующем:
В функцию myfunc по параметру приходит long переменная.
Когда она внутри функции делится на 60 и присваивается в переменную float, то дробная часть все время равна нулю.

C++
1
2
3
4
5
void myfunc (long x)
{
   float a;
   a = x/60;
}
подскажите, пожалуйста, где может быть зарыта собака?)

Пробовал заменить x на число - результат тот же.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.08.2010, 02:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос float обнуляет дробную часть (C++):

Из числа float получить два int-a: целую и дробную части - C++
Всем привет. Как можно из числа float получить два inta. приведу пример: есть 1,45 и 2,397. из первого нужно получить 1 и 45, из второго 2...

Оставить дробную часть - C++
Допустим, имеем число 12,345. Необходимо это число преобразовать в 0.345. Просто отбросить целую часть не годится, уже пробовал через: ...

Перевести дробную часть в целочисленную - C++
из числа 0.131313 должно получиться 131313 Чего бы такого придумать ?

Вывести дробную часть числа - C++
Подскажите пожалуйста как в С++ вывести остаток после запятой... Т.Е. 5/2=2.5 мне нужно что-бы вывело 5 Гуглил, не нашел...

Как задать проверку на дробную часть? - C++
Что исправить когда ввожу число без дроби например 49 пишет сорок девять сантиметра ноль милиметров а нужно просто сорок девять...

Преобразование целого числа в дробную часть - C++
Здравствуйте. Вот есть 2 целых числа a=25 b=3453. Нужно получить с=25,3453. Есть ли функция или что посоветуете?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
12.08.2010, 02:53 #2
C
1
2
3
4
5
void myfunc (long x)
{
 float a;
 a = 1.0*x/60;
}
здесь проблема преобразования типов: x - целый, x/60 - также будет целым, и только после этого переведется в float

при 1.0*x/60; 1.0*x переведется в double(дробный), потом поделится, и потом в float

можно сделать
a = static_cast<float>(x)/60;
2
Евгений М.
1035 / 976 / 54
Регистрация: 28.02.2010
Сообщений: 2,829
Завершенные тесты: 2
12.08.2010, 02:53 #3
У Вас происходит целочисленное деление, т.е. при делении дробная часть откидывается.
Чтобы получилось "нормальное" деление нужно чтобы либо делимое либо делитель быть числом (или переменной) "дробного" типа.
В данном случае чтобы 60 имел "дробный" тип нужно записать так:
C
1
a = x/60.;
1
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
12.08.2010, 03:05  [ТС] #4
Спасибо большое!
Я тоже об этом подумал, и через static_cast у меня получилось.

Спасибо.
0
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
12.08.2010, 03:05 #5
..так сказать завершая, преобразования типов происходят
unsigned -> signed
short -> long -> long long
целых (char,int) -> дробные (float, double)
Цитата Сообщение от Евгений М. Посмотреть сообщение
a = x/60.;
по мне проще порядок слева направо соблюдать, но тоже вариант
0
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
12.08.2010, 11:23  [ТС] #6
До варианта с "х/60." никогда бы в жизни не додумался... Зато самый запоминающийся

Добавлено через 1 минуту
Цитата Сообщение от alex_x_x Посмотреть сообщение
..так сказать завершая, преобразования типов происходят
unsigned -> signed
short -> long -> long long
целых (char,int) -> дробные (float, double)
Простите за нескромный вопрос, что сие значит?
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
12.08.2010, 11:25 #7
half-node, Порядок преобразования типов
0
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
12.08.2010, 11:28  [ТС] #8
Цитата Сообщение от Lavroff Посмотреть сообщение
half-node, Порядок преобразования типов
Надо понимать, при неявном преобразовании?


Нет..Все равно не понимаю, что значит int -> float. Почему не float -> int, ведь такое тоже может быть? Или вообще речь о другом? >_<
0
Nameless One
Эксперт С++
5773 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
12.08.2010, 11:52 #9
Цитата Сообщение от half-node Посмотреть сообщение
Нет..Все равно не понимаю, что значит int -> float
Это значит, что в следующем примере ival будет неявно преобразовано к типу float:
C
1
2
3
4
5
int ival = 5;
float fval = 5.4;
// ival сначала преобразуется к float, вычисляется выражение
// и результат присваивается переменной fresult
float fresult = ival + fval;
Если бы в предыдущем примере происходило бы преобразование по правилу float->int, то операция суммирования происходила бы с потерей точности, т.к. при преобразовании плавающего типа к целому дробная часть отбрасывается. В общем случае преобразование производится к типу с большей точностью.
Цитата Сообщение от half-node Посмотреть сообщение
Почему не float -> int, ведь такое тоже может быть
Если под "такое может быть" ты подразумеваешь это, то да:
C
1
2
3
// ival сначала преобразуется к float, вычисляется выражение
//  РЕЗУЛЬТАТ ПРЕОБРАЗУЕТСЯ К INT и присваивается iresult
int iresult = ival + fval;
0
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
12.08.2010, 17:50  [ТС] #10
ааа..все. Спасибо.
Еще. Не хотел создавать новую тему.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
            cout << "Enter number: "; cin >> fchis;
            do
            {
                cout << "Want to enter degree? "; cin >> yesno;
                if(yesno=='y')
                {
                    cout << "Degree: "; cin >> stepen;
                    fchis = power(fchis, stepen);
                }
                else if(yesno=='n')
                {
                    fchis = power(fchis);
                }
                else
                {
                    cout << "Enter only \"y\" or \"n\"\n";
                }
            }while ((yesno=='y') || (yesno=='n'));
Этот кусок кода огорчает тем, что в не зависимости от значения yesno, цикл продолжается вечно!
0
evgeny1503
3 / 3 / 0
Регистрация: 04.07.2010
Сообщений: 24
12.08.2010, 18:14 #11
Цитата Сообщение от half-node Посмотреть сообщение
}while ((yesno=='y') || (yesno=='n'));
Я тоже новичок, но тут по ходу не правильно, лучше, наверное так:
Цитата Сообщение от half-node Посмотреть сообщение
}while (yesno=='y');
0
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
12.08.2010, 18:19  [ТС] #12
Цитата Сообщение от evgeny1503 Посмотреть сообщение
Я тоже новичок, но тут по ходу не правильно, лучше, наверное так
Ну..у меня как бы тоже самое, только у тебя просто: До тех пор пока есно не равняется игрек.
А у меня: До тех пор пока есно не равняется игрек или эн
0
Nameless One
Эксперт С++
5773 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
12.08.2010, 18:25 #13
Не знаю, у меня все работает. Да и у тебя все вроде правильно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <cstdlib>
 
int main(int argc, char **argv)
{
    char ans;
    do
    {
        std::cout << "Input \'y\' or \'n\' or any other key to quit: ";
        std::cin >> ans;
        ans = tolower(ans);
 
        if (ans == 'y')
            std::cout << "Ooh yes!" << std::endl;
        else if (ans == 'n')
            std::cout << "Ooh no!" << std::endl;
        else
            std::cout << "Bye-bye!" << std::endl;
    }
    while ((ans == 'y') || (ans == 'n'));
    return EXIT_SUCCESS;
}
0
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
12.08.2010, 18:31  [ТС] #14
чудеса...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.08.2010, 18:31
Привет! Вот еще темы с ответами:

Вычислите дробную часть среднего арифметического - C++
Вычислите дробную часть среднего арифметического и дробную часть среднего геометрического трех заданных чисел! Заранее спасибо!

Разбить число на целую и дробную часть - C++
Возможно-ли разбить число x, допустим, это- &quot;3.142&quot;, на целую и дробную часть. Именно чтобы было &quot;3&quot; и &quot;14&quot;, а не &quot;3.000&quot; и &quot;0.142&quot; как на...

Разделить число на дробную и целую часть - C++
как можно разделить число на дробную и целую часть void main() { long a1; // a1 = целая часть числла double a; // а число ...

Std::stod отсекает дробную часть - C++
В файлике имеется текст с чиселками как целыми, так и нет. Вся соль в том, что std::stod почему-то преобразует строку к инту а не даблу... ...


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

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

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