The trouble is your raw Item state will be something like “20°C”, the units are part of it. You cannot format that text string using pattern %.0f in the UI because the source is not a simple decimal number. (The OH server does jiggery-pokery behind the scenes at the server end when you use pattern at the actual Item)
You’ll have to have more complex UI code to strip or replace units, parse the string to numeric, and format with decimal places.
This shouldn’t work, and probably only does because the item being used in the label has the correct formatting on its displayState. If you take a look at where the label is defined in the vue code:
you can see that when a component is a label and is visible all that is done is that a div is created, the class and style configs are applied to it and then the text config is directly inserted into the the div. That’s it. There’s nothing that alters the text.
As rossko has said, if you want to pattern the text that you are displaying, you have to do it in the expression yourself.