Попробую еще раз.
МОЕ ПОНИМАНИЕ ПРОБЛЕМЫ:
Цитата:
Сообщение от
valentino
Возникла проблема преобразования из текстового представления числа в само число, т.е. из "123 456.78" в 123456.78.
...
Текстовое представлене числа изначально в Аксапте формируется с помощью функции strfmt("%1", число).
МОЕ РЕШЕНИЕ ПРОБЛЕМЫ:
Цитата:
Сообщение от
Gustav
Функция strFmt возвращает в виде строки ... real-число - с двумя десятичными знаками ... можно оставить в строке только 10 цифровых символов и знак "минус". Далее полученную строку конвертнуть обратно в число ... "обманув" ... и разделитель тысяч, и десятичную точку (запятую):
... и окончательный вариант "обмана" выглядит так (без предыдущего, возможно кого-то пугающего, деления на 100):
X++:
static void Job173(Args _args)
{
real a = 123456.78;
str strNumberAfterStrFmt = strFmt('%1', a);
real b;
boolean c;
;
b = str2Num(
strFmt ( '%1e-2',
strKeep( strNumberAfterStrFmt, '-0123456789')));
c = a == b;
box::info(strFmt('%1\n\n%2\n\n%3',
strFmt('Исходное число: %1', a),
strFmt('Восстановленное число из строки: %1', b),
strFmt('Исходное число равно числу из строки?: %1', c)));
}
P.S.
В процессе эксперимента обратил внимание на то, что региональные настройки Аксапта считывает при старте приложения и далее в текущей сессии их не меняет (!) даже при изменении региональных настроек в панели управления. Такое поведение Аксапты отличается, например, от поведения Excel, где при смене локали c Russian на English (United States) наглядно видно, как в ячейке тут же меняются разделители тысяч с пробелов на запятые.