Показать сообщение отдельно
Старый 29.04.2009, 12:28   #10  
in.dc is offline
in.dc
Участник
 
29 / 53 (2) ++++
Регистрация: 09.04.2009
strrem vs strkeep
Цитата:
Сообщение от valentino
X++:
s = strrem(s, thousandsSeparator);              // ничего не происходит
Цитата:
Сообщение от valentino Посмотреть сообщение
X++:
s = num2str(123456.78, 10, 2, -1, -1);    // s ="123 456.78"  (с пробелом, код которого = 32)
num = str2num(s);    // num = 123, в то время как ожидалось 123456.78  !!!
а попытка удалить из текстового представления тысячный разделитель (это может быть не только пробел) ни к чему не приводит, т.к. в данный момент в региональных настройках символ тысячного разделителя - это пробел с кодом 160! (см. первый джоб в начале темы)
А если рассмотреть вопрос с удалением символа 'разделителя тысяч' с другой позиции: т.е. не пытаться удалить (strrem) конкретный символ, а оставить в строке (содержащией числа) только допустимые с точки зрения Ax числовые символы (strkeep)?

X++:
static void jobRemoveThousandsSeparator(Args _args)
{
    #define.Numerics( ',.+-0123456789e' )
    str     s = num2str( 123456.78, 10, 2, -1, -1 ) ;
    real    num = str2num( strkeep( s, #Numerics ) ) ;
    ;

    info( strfmt( "%1", num ) ) ;
}
UPD: Oops, немного опоздал.
Изображения
 
__________________
Dynamics AX 4.0 SP2

Последний раз редактировалось in.dc; 29.04.2009 в 12:34. Причина: вариант с strkeep чуть раньше упомянул Hyper
За это сообщение автора поблагодарили: valentino (1).