Поскольку типы данных для а и б не указаны я считая их типа междунар.
В C результат операции зависит от типов данных операндов. Результат не может иметь больше точности/точности/размера, чем сами операнды. То, с чем вы сталкиваетесь, связано с целыми арифметическими правилами.
Теперь, в вашем случае: оба -2 и 1 в b = 1/a
являются целыми числами, поэтому результат будет усечен до целого числа, поэтому -1/2 = -0,5 усечено до 0. %.2f
не поможет, поскольку значение в b уже 0.
Таким образом, чтобы b был -0.5. Вы должны иметь как a, так и b как float и print, используя% f.
или
Вы можете иметь, как INT и б, как поплавок и писать, как б 1.0/a
. (Здесь 1 - float a is int, поэтому результатом будет float typecasting a to int).
или
через типажей: b = 1/(float)a;
Вы должны пройти через правила приведения типов.
Переменные 'a' и' b' объявлены как 'int' в вашем коде, не так ли? попробуйте объявить один из них как float, тогда вы получите '-0.5'. И до того, как вы напечатаете через '% .2f', значение уже' 0', u просто отбрасывается из '0', поэтому результат отливки также равен' 0'. –
@EricWang: объявление одного из них как float wont work. Если b int int can not hold -0.5. Если a is int, вы снова попадаете в целочисленную арифметическую проблему. – tapananand
@lesnar Да, я прав, я думаю, что есть другая переменная c, объявленная как float, и c = a/b, нужно, чтобы один из a или b был float. –