What is the encoding difference between ARINC 429 BNR and BCD formats?
Your basic decoding strategy looks correct -I didn't double-check the values, but the logic is sound. Note, however, that the difference of BCD vs two's-complement is not the only difference between BNR and BCD (and Discrete labels, which are also common). Binary-coded decimal (BCD) and binary (BNR) labels generally do decode as you have shown, but the Sign-Status Matrix (SSM) plays a large part in interpreting that data and using it is not optional.

For BCD labels, the SSM informs whether the data is positive or negative (or what direction is points), hence "Plus, North, East, Right, To, Above" vs "Minus, South, West, From, Below". It also informs if the data is invalid ("No Computed Data"). BNR labels include sign information already in the two's-complement encoding, so duplicating that information into the SSM would waste valuable bandwidth. The SSM still informs you of invalid data, but can also inform of (non-)operation in reversionary mode ("Failure Warning") or correct behavior ("Normal Operation").

What that of that means for a given LRU (line-replacable unit)1 can be completely different from any other LRU. To have any confidence in your interpretation of a label, you must obtain a hardware integration guide for the specific LRU in question to determine what format data is or must be provided in and what the SSM values imply. This integration guide is a separate document from any user or maintenance manual you may have received with an LRU for installation into an aircraft. It is usually only provided to original equipment manufacturers of other LRUs.

For example, a BNR label might still contain a readable value when the SSM is set to "Failure Warning", but whether or not you can still use that data depends on what the failure implies for the particular LRU. I once encountered an LRU that provided a label for barometric altitude that reverted to GPS height above ellipsoid when failure mode was set. This change in represented value was not appreciated at the time, but did teach me to always inspect the SSM first before believing any particular value. Furthermore, many BNR labels are also scaled by some arbitrary factor to provide a wider range of representable values. The scale factor is provided in the integration guide, and is usually a fixed value, but I have encountered some labels with values scaled by values from other labels.

The format for Discrete labels is always specific to the LRU. To know what this encoding is, you must have the integration guide.

Ultimately the difference between each particular ARINC429 label will depend on the specific equipment to which you are interfacing. The standard data types (BNR/BCD/Discrete) provide a rough idea of how the data is packaged, but the integration guide is the authoritative source for data encoding.

1: I use LRU as shorthand to mean any ARINC429 node. In practice, many ARINC429-compatible devices are not necessarily line-replacable.