Показать сообщение отдельно
Старый 30.04.2009, 15:26   #24  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
С целыми числами будет ошибка. StrFmt() в этом случае не создает дробной части. Получается лишнее деление на 100.
Это да. Про целые я уже сделал оговорку выше:
Цитата:
Сообщение от Gustav Посмотреть сообщение
Если исходное число целое, то его можно по ходу без напряжения превратить в real, сложив с 0. или умножив на 1. (точки важны!) или разделить на 1 (можно без точки):
X++:
int a = 1000000;

strFmt('%1', a + 0.) // или
strFmt('%1', a * 1.) // или
strFmt('%1', a / 1 ) // хоть по теории это и самый долгий вариант, 
                     // зато без точки :)
но вроде круг ограничивается real'ами, т.к. упоминается семейство отчетов RLedgerSheet*:
Цитата:
Сообщение от valentino Посмотреть сообщение
Речь идет о семействе отчетов RLedgerSheet* которые отображают формочку с ListView, а в нем отображаются цифры преобразованные в строки.
Т.е. real'ные ДЕНЬГИ! ДЕНЬГИ!

P.S.
Ну, впрочем, можно и допилить слегка, правда, в этом случае появляется зависимость еще и от исходного числа, а не только от промежуточной строки (бррр! бред какой-то! ):
X++:
    b = str2Num(
            strFmt ( '%1e-%2',
                strKeep( strNumberAfterStrFmt, '-0123456789'),
                typeOf(a) == Types::Real ? 2 : 0
            ));

Последний раз редактировалось Gustav; 30.04.2009 в 15:48.