Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/43: Рейтинг темы: голосов - 43, средняя оценка - 4.67
23 / 20 / 3
Регистрация: 12.08.2010
Сообщений: 206

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

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

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

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

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

Пробовал заменить x на число - результат тот же.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.08.2010, 02:43
Ответы с готовыми решениями:

Вывести отдельно целую, отдельно дробную часть float-а
Ввёл 23.34, нужно сделать так, чтобы на консоль 23 отдельно, 34 отдельно вышло, как это сделать?

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

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

13
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
12.08.2010, 02:53
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
1080 / 1007 / 107
Регистрация: 28.02.2010
Сообщений: 2,889
12.08.2010, 02:53
У Вас происходит целочисленное деление, т.е. при делении дробная часть откидывается.
Чтобы получилось "нормальное" деление нужно чтобы либо делимое либо делитель быть числом (или переменной) "дробного" типа.
В данном случае чтобы 60 имел "дробный" тип нужно записать так:
C
1
a = x/60.;
1
23 / 20 / 3
Регистрация: 12.08.2010
Сообщений: 206
12.08.2010, 03:05  [ТС]
Спасибо большое!
Я тоже об этом подумал, и через static_cast у меня получилось.

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

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


Нет..Все равно не понимаю, что значит int -> float. Почему не float -> int, ведь такое тоже может быть? Или вообще речь о другом? >_<
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
12.08.2010, 11:52
Цитата Сообщение от 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
23 / 20 / 3
Регистрация: 12.08.2010
Сообщений: 206
12.08.2010, 17:50  [ТС]
ааа..все. Спасибо.
Еще. Не хотел создавать новую тему.
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
3 / 3 / 0
Регистрация: 04.07.2010
Сообщений: 28
12.08.2010, 18:14
Цитата Сообщение от half-node Посмотреть сообщение
}while ((yesno=='y') || (yesno=='n'));
Я тоже новичок, но тут по ходу не правильно, лучше, наверное так:
Цитата Сообщение от half-node Посмотреть сообщение
}while (yesno=='y');
0
23 / 20 / 3
Регистрация: 12.08.2010
Сообщений: 206
12.08.2010, 18:19  [ТС]
Цитата Сообщение от evgeny1503 Посмотреть сообщение
Я тоже новичок, но тут по ходу не правильно, лучше, наверное так
Ну..у меня как бы тоже самое, только у тебя просто: До тех пор пока есно не равняется игрек.
А у меня: До тех пор пока есно не равняется игрек или эн
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
12.08.2010, 18:25
Не знаю, у меня все работает. Да и у тебя все вроде правильно.
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
23 / 20 / 3
Регистрация: 12.08.2010
Сообщений: 206
12.08.2010, 18:31  [ТС]
чудеса...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.08.2010, 18:31
Помогаю со студенческими работами здесь

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

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

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

Разбить число на целую и дробную часть
Определить равна ли сумма цифр целой части действительного числа сумме такого же количества цифр в дробной части. Привет форумчане! ...

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru