|  01.02.2011, 17:52 | #1 | 
| Гость | как перевести строку в число, используя региональные настройки? 
			
			вопрос к знатокам C#: как перевести строку в число, используя региональные настройки?
		 | 
|  | 
|  01.02.2011, 18:33 | #2 | 
| Модератор | 
			
			В WinApi есть функция getLocaleInfo() Для десятичного разделителя: WinAPI::getLocaleInfo(#LOCALE_USER_DEFAULT, #LOCALE_SDECIMAL); Для разделителя тысяч: WinAPI::getLocaleInfo(#LOCALE_USER_DEFAULT, #LOCALE_STHOUSAND); Можно рыть в эту сторону или погуглить пример с этой функцией. С Уважением, Георгий | 
|  | 
|  01.02.2011, 19:01 | #3 | 
| Участник | 
			
			Если не ошибаюсь, то strFmt() переводит как раз на основе текущих региональных настроек. Или надо произвольные региональные настройки?
		 | 
|  | 
|  01.02.2011, 19:05 | #4 | 
| Модератор | 
			
			Да, в Аксапте. Вопрос, насколько я понял, что C#.
		 | 
|  | 
|  01.02.2011, 20:01 | #5 | 
| Гость | 
			
			если бы бездумно не выдернули из правильной темы мой вопрос, было бы все ясно. Весь контекст темы я продублить не смогу. Суть вопроса: str2int отрабатывает некорректно. | 
|  | 
|  01.02.2011, 20:30 | #6 | 
| Участник | 
			
			У меня работает вот такой пример: 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 | 
| Гость | 
			
			атас. А в одну функцию нету?
		 | 
|  | 
|  01.02.2011, 21:16 | #8 | 
| SAP | Цитата: 
		
			атас. А в одну функцию нету?
		
	 | 
|  | 
|  01.02.2011, 22:08 | #9 | 
| Участник | 
			
			Можно еще воспользоваться классом 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
    {
    }
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | 
|  02.02.2011, 01:18 | #10 | 
| Гость | 
			
			спасибо всем участникам. А респектами я не пользуюсь
		 | 
|  | 
|  02.02.2011, 14:17 | #11 | 
| Участник | 
			
			Для корректной работы функций 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 | 
| SAP | Цитата: 
		
			спасибо всем участникам. А респектами я не пользуюсь
		
	 | 
|  | 
| Теги | 
| .net, как правильно, преобразование типов | 
|  | 
| 
 |