AFAIK, based on Tests on my Linux PC, to get LC_NUMERIC to influence the output of sprintf requires adding 'use locale;' (in addition to 'use POSIX;' or 'use POSIX qw(locale_h);') in the script.
On my Linux PC I actually have a locale (de_DE) that uses comma as decimal point and dot as thousands separator and despite that it has no influence on the calculations in the test program or the original application.
But since 'use POSIX;' also includes 'use POSIX qw(locale_h);' I have now modified my test script to use 'use POSIX qw(strftime);' instead of 'use POSIX;' and asked the Mac M1 user to download and run the test script again and based on his feedback it's still ignoring decimals in the multiplication, the output is still:
12.99
16.25
192