This was not working because you did not specify what unit you want. Therefore, it was using the system default unit of ONE which is a simple ratio. Adding unit="%" and the Item’s state will be a percentage instead.
The state description pattern converts the state of the Item to % for display purposes only. However, the Item’s state remains in the unit of ONE and therefore if you were to chart it, it would be charted in the unit of ONE. If you retrieve it in a rule, it will be in the unit of ONE unless you convert it. That’s why you need the unit=% too.
For more details about transforming how the state of an Item is shown see Items | openHAB.
If you are in a situation where you really do need to transform the state before it gets to the Item, see Transformations | openHAB. These can be applied on some Thing Channels (depends on the binding), on the link between a Channel and an Item (called a “profile”), in a rule, and in the stateDescription pattern. There are a bunch of add-ons for doing all sorts of transformations.