The (locale-currency-symbol) procedure uses the wrong locale setting, which effects the formatting of monetary amounts:
scheme@(guile-user)> (use-modules (ice-9 i18n)) scheme@(guile-user)> (setlocale LC_ALL "") $3 = "de_AT.UTF-8" scheme@(guile-user)> (display (monetary-amount->locale-string +123.456 #f)) (newline) -€ 123,46 A negative amount??? This seems to be the source of the problem: scheme@(guile-user)> (locale-currency-symbol #f) $2 = "-€" (Note if your e-mail agent cannot display the currency symbol correctly: The symbol ought to be displayed as the EUR-sign.) Obviously, the implementation uses the "crncystr" setting: $ locale -kc LC_MONETARY | grep -E '€' currency_symbol="€" crncystr="-€" duo_currency_symbol="€" Problem resolution: The implementation should use the "currency_symbol" setting rather than the "crncystr" setting. Alternatively, the "crncystr" can be used, but then the first character should be interpreted as defined by the POSIX standard, i. e. as a mode indicator and not as part of the actual currency symbol.