2017-01-11 4 views
-4

код я использовал в С ++:переменная поплавок не хранит десятичного

float y; 
y=360/100; 
cout<<y; 

выход 3. Даже, если я не выводите у, и вместо того, чтобы использовать его для функции как слева (y), вместо 3 берется значение 3. Но если я определяю y = 360.0/100, он отлично работает.

Кстати, left() - это функция, входящая в комплект, сделанный нашим CS prof. Left (x) изменяет направление на угол х градусов влево. Пакет на основе логотипа.

+0

Использовать 'y = 360f/100;' – Axel

+0

Это * целое * разделение, хранящееся в переменной float. Результат 3 независимо от того, где он хранится –

+0

В C и братьях и сестрах (и двоюродных братьях и других далеких родственниках, даже усыновленных детей) целочисленное деление дает целочисленный результат. –

ответ

2

Так определяется язык. Вы делите int на int, поэтому выполняется расчет, в результате чего получается int, что дает 3 (усечение, а не округление).

Затем вы размещаете 3 в количестве float, что дает 3.0.

Если вы хотите, чтобы деление выполнялось с использованием float s, сделайте (по крайней мере) один из аргументов a float, например. 360f/100. Таким образом, другие аргументы будут преобразованы в floatдо деление выполнено.

360/100f будет работать одинаково хорошо, но я думаю, что, возможно, имеет смысл как можно скорее дать понять, что это расчет с плавающей точкой, а не интегральный; это человеческое соображение, а не техническое.

(Обратите внимание, что 360.0 на самом деле является double, хотя использование, что будет работать так же хорошо. Разделение будет выполняться как double, то результат преобразуется в float для выполнения задания).

0

360/100 вычисляется в целое арифметической перед тем он назначен на float.

Переработка до 360f/100 - мой любимый способ исправить это.

И наконец, в эти дни float s предназначены для пожирателей quiche, девушек и людей, которые не понимают, как работают современные чипсеты. Вместо этого используйте тип double - который, вероятно, будет быстрее - и 360.0/100.

Смежные вопросы