AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.04.2009, 16:55   #1  
valentino is offline
valentino
Участник
Аватар для valentino
 
33 / 11 (1) +
Регистрация: 14.02.2007
Разделитель тысячных
Привет всем!
Возникла проблема преобразования из текстового представления числа в само число, т.е. из "123 456.78" в 123456.78.
При использовании str2num(), any2real() получаем число 123 (ожидалось 123456.78).
Исследование показало следующее:
1. Попытка удалить пробелы из текстового представления числа (разделитель тысячных) ни к чему не приводит, т.к. там на самом деле стоит символ с кодом 160. Этот символ (пробел с кодом 160) берется из региональных настроек для Российского стандарта панели управления. Это стандартно для любого виндоуса.
2. Текстовое представлене числа изначально в Аксапте формируется с помощью функции strfmt("%1", число). При этом код символа разделителя тысячных = 32 (обычный пробел).
3. Текстовое представлене с помощью num2str() дает тот же результат (код символа разделителя тысячных = 32).

Таким образом вопрос сводится к следующему:
почему при преобразовании из числа в строку в качестве разделителя тысячных Аксапта вставляет пробел (код = 32), а не символ из панели управления (код = 160)?

Тестовый джоб:
X++:
static void Test_ConvertStr2num(Args _args)
{
    amount      a, b;
    int         asciiCode;
    str         s, separator, thousandsSeparator;
    boolean     result;
    ;
    thousandsSeparator = WinApi::getUserLocaleThousandSeparator_RU();
    asciiCode = char2num(thousandsSeparator, 1);    // 160
    result    = thousandsSeparator == " ";          // false
    a = 123456.78;
    s = num2str(a, 10, 2, -1, -1);                  // "123 456.78"
    separator = substr(s, 4, 1);                    // вытащить разделитель
    asciiCode = char2num(separator, 1);             // 32
    result = thousandsSeparator == separator;       // false
    result = separator == " ";                      // true
    s = strfmt("%1", a);                            // "123 456.78"
    b = any2real(s);                                // 123
    b = str2num(s);                                 // 123
    separator = substr(s, 4, 1);                    // вытащить разделитель
    asciiCode = char2num(separator, 1);             // 32
    s = strrem(s, thousandsSeparator);              // ничего не происходит
    b = str2num(s);                                 // 123
    b = any2real(s);                                // 123
    b = b;
}
Теги
разделитель тысячных, axapta

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Разделитель страницы в MS WORD FiGr DAX: Программирование 3 14.05.2007 15:24
Разделитель десятичных знаков в отчетах dirigente DAX: Функционал 0 20.11.2003 12:28

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 20:48.