Другие языки программирования и технологии
Автоматическое приведение типов (вопрос по С++)
при операции происходит автоматическое округление, к примеру:float k = 100/120; // в результате в k запишется 0float kk = 120/100; // в результате в kk запишется 1Если присвоить без вычислений дробное значение то всё ок:float kkk = 1.1234; // в результате в kkk запишется 1.1234В чём может быть проблема?
Вы делите int на int, получется результат int, если вы поделите так float k = (float)100|120;, то получится флоат, т. к. компилятор при этом приведет 120(ведь оно инт) к типу флоат (к большему типу) и поделит, а результат занесет в флоат, если бы к было инт, то он бы привел его к инт
т. е варианты такие
float k = (float) 100/120;
float k = 100/(float) 120;
float k = (float)100/ (float) 120;
Да, Дмитрий, правильно пишет, если у вас числа, а не переменные, то просто добавьте десятичную точку и все будет ОК
т. е варианты такие
float k = (float) 100/120;
float k = 100/(float) 120;
float k = (float)100/ (float) 120;
Да, Дмитрий, правильно пишет, если у вас числа, а не переменные, то просто добавьте десятичную точку и все будет ОК
floak k = 100F / 120F;
Можно также попробовать использовать float-литералы (точнее, они будут double-литералами... )
floak k = 100.0 / 120.0
И так далее.
floak k = 100.0 / 120.0
И так далее.
Добавлю к ответу Артёма. Можно сделать проще:
float k = 100.0 / 120.0;
float k = 100.0 / 120.0;
(без явного приведения типов)
float k = 100.0 / 120.0;
float k = 100.0 / 120.0;
(без явного приведения типов)
В C++ тип выражения справа от = независит от типа выражения слева. Тип 100 - int, тип 200 - тоже int. Результат деления - тоже int. Численные типы различаются классом точности. В общем случае, порядок точности численных типов данных определяется величиной sizeof(T), хотя на класс точности влияет также наличие модификатора unsigned (например, приведение unsigned int к int вызовет предупреждение, поскольку эти типы принадлежат к разному классу точности) , а также наличие плавающей запятой, конечно же. В выражениях неявное приведение числовых типов происходит от менее точного к более точному, но не наоборот.
Выражение 200.0 / 100 будет иметь тип double, многие компиляторы выдадут предупреждение (а, например, в C#, в котором неявные преобразования типа сведены к минимуму, выражение float f = 200.0 / 100 вообще не пройдёт) .
Правильный вариант - использование суффикса типизации f:
float value = 200f / 100f;
Выражение 200.0 / 100 будет иметь тип double, многие компиляторы выдадут предупреждение (а, например, в C#, в котором неявные преобразования типа сведены к минимуму, выражение float f = 200.0 / 100 вообще не пройдёт) .
Правильный вариант - использование суффикса типизации f:
float value = 200f / 100f;
Похожие вопросы
- С++ приведение типов
- программа автоматического распознавания и ввода капчи ?
- Несколько вопросов про преобразование типов в С++ и возможно не только.
- Можно ли убрать автоматическое обновление сиситемы? Проблем не будет? Заранее спасибо
- скрипт для автоматической инталляции программ из списка в ubuntu
- Подскажите: как продвинуть сайт новичку бесплатно? Какой сервер автоматических регистраций в каталогах лучше?
- Убедите меня, в деталях,что нейросеть-это не просто фотомонтаж автоматический?
- Вопрос про типы данных
- Вопрос сисадиминам, web-программистам, ну или "типа хакерам" знающим ответ на мой вопрос...
- Программирование в С++. Вопрос по времменным типам.