Функция strFmt возвращает в виде строки: int-число - без десятичных знаков, real-число - с двумя десятичными знаками (и без всяких научных e-форматов). Если быть уверенным, что речь идет именно о real (а наверняка речь идёт о деньгах, а они всегда real), то можно оставить в строке только 10 цифровых символов и знак "минус". Далее полученную строку конвертнуть обратно в число и разделить на 100, "обманув" таким образом и разделитель тысяч, и десятичную точку (запятую):
X++:
static void Job173(Args _args)
{
AmountMst a = -10.000012345678987e+12;
str s = strKeep(strFmt('%1', a), '-0123456789');
real b = str2num(s) / 100; // ну или * 0.01
;
box::info(strFmt('%1', b));
}
P.S.
Если исходное число целое, то его можно по ходу без напряжения превратить в real, сложив с 0. или умножив на 1. (точки важны!) или разделить на 1 (можно без точки):
X++:
int a = 1000000;
strFmt('%1', a + 0.) // или
strFmt('%1', a * 1.) // или
strFmt('%1', a / 1 ) // хоть по теории это и самый долгий вариант,
// зато без точки :)