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, как правильно, преобразование типов |
|
|