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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.02.2011, 17:52   #1  
otkudao
Гость
 
n/a
как перевести строку в число, используя региональные настройки?
вопрос к знатокам C#: как перевести строку в число, используя региональные настройки?
Старый 01.02.2011, 18:33   #2  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
В WinApi есть функция getLocaleInfo()

Для десятичного разделителя: WinAPI::getLocaleInfo(#LOCALE_USER_DEFAULT, #LOCALE_SDECIMAL);
Для разделителя тысяч: WinAPI::getLocaleInfo(#LOCALE_USER_DEFAULT, #LOCALE_STHOUSAND);

Можно рыть в эту сторону или погуглить пример с этой функцией.

С Уважением,
Георгий
Старый 01.02.2011, 19:01   #3  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Если не ошибаюсь, то strFmt() переводит как раз на основе текущих региональных настроек. Или надо произвольные региональные настройки?
Старый 01.02.2011, 19:05   #4  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Да, в Аксапте. Вопрос, насколько я понял, что C#.
Старый 01.02.2011, 20:01   #5  
otkudao
Гость
 
n/a
если бы бездумно не выдернули из правильной темы мой вопрос, было бы все ясно. Весь контекст темы я продублить не смогу.

Суть вопроса: str2int отрабатывает некорректно.
Старый 01.02.2011, 20:30   #6  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
У меня работает вот такой пример:
X++:
System.Globalization.CultureInfo    myCulture;
System.Threading.Thread             myThread;
Integer                             i;
str                                 s = "-123 456 789,00р.";
;
myThread = System.Threading.Thread::get_CurrentThread();
myCulture = myThread.get_CurrentCulture();
try
{
    i = System.Int32::Parse( s, System.Globalization.NumberStyles::Any, myCulture );
    info( strfmt( '%1', i ) );
}
catch (Exception::CLRError)
{
    info( AifUtil::getClrErrorMessage() );
}
Старый 01.02.2011, 20:37   #7  
otkudao
Гость
 
n/a
атас. А в одну функцию нету?
Старый 01.02.2011, 21:16   #8  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
Цитата:
атас. А в одну функцию нету?
вот так вот, хоть бы за это респект человеку поставил!
Старый 01.02.2011, 22:08   #9  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Можно еще воспользоваться классом Convert
X++:
    System.String                           string;
    System.Double                           double;
    System.Int32                            int32;
    System.Globalization.CultureInfo        cultureInfo = System.Globalization.CultureInfo::CreateSpecificCulture("en-us");
    ;
    string = "-123,456,789.52";
    try
    {
        double = System.Convert::ToDouble(string, cultureInfo.get_NumberFormat());
        int32 = System.Convert::ToInt32(double);
    }
    catch
    {
    }
Если строка соответствует текущему формату, то можно вызвать просто System.Convert::ToDouble(string)
__________________
Axapta v.3.0 sp5 kr2
Старый 02.02.2011, 01:18   #10  
otkudao
Гость
 
n/a
спасибо всем участникам. А респектами я не пользуюсь
Старый 02.02.2011, 14:17   #11  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от otkudao Посмотреть сообщение
Суть вопроса: str2int отрабатывает некорректно.
Для корректной работы функций str2num() достаточно чтобы у символьного представления числа не было разделителей тысяч и разделителем целой и дробной части выступала точка.

Другими словами необходимо:

1. Удалить символы-разделители тысяч
2. Установить в качестве разделителя целой и дробной части точку

X++:
static void JOB_test(Args _args)
{
    str     strSeparators;
    str     strThousend;
    str     strPoint;
    str     strNumber = strFmt("%1",123456789.01);
    real    realNumber;

    ;

    print "Исходная строка      = ", strNumber;

    // Символы-разделители 
    strSeparators   = strRem(strFmt("%1",1111.11),"1");
    // Разделитель целой и дробной части
    strPoint        = subStr(strSeparators, strLen(strSeparators),1);
    // Разделитель тысяч
    strThousend     = strRem(strSeparators, strPoint);

    // Удаляем разделитель тысяч
    strNumber = strRem(strNumber, strThousend);
    // Заменяем разделитель целой и дробной части на точку
    //strNumber = global::strReplace(strNumber, strPoint, ".");
    strNumber = strPoke(strNumber,".",strFind(strNumber, strPoint, 1, strLen(strNumber)));

    // Собственно преобразование
    realNumber = str2num(strNumber);

    print "После преобразования = ", strNumber;
    print "Первод в число       = ", realNumber;
    pause;

}
Старый 02.02.2011, 14:36   #12  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
Цитата:
спасибо всем участникам. А респектами я не пользуюсь
ааа, понимаю
Теги
.net, как правильно, преобразование типов

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Пользовательские настройки и модификация форм olesh DAX: Программирование 6 30.03.2017 10:54
как перевести строку в UTF-8 ? e@gle DAX: Программирование 1 17.04.2006 13:38
Региональные настройки в винде BVN DAX: Программирование 3 21.09.2005 13:25
Как заставить Аксапту использовать региональные настройки Windows? ravil DAX: Администрирование 15 28.07.2004 14:33
Проблемы настройки прав доступа пользователям axot DAX: Администрирование 25 16.05.2002 10:47

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

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

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