|  30.04.2009, 09:28 | #21 | 
| Moderator | 
			
			Попробую еще раз. МОЕ ПОНИМАНИЕ ПРОБЛЕМЫ: Цитата: Цитата: X++: static void Job173(Args _args) { real a = 123456.78; str strNumberAfterStrFmt = strFmt('%1', a); real b; boolean c; ; b = str2Num( strFmt ( '%1e-2', strKeep( strNumberAfterStrFmt, '-0123456789'))); c = a == b; box::info(strFmt('%1\n\n%2\n\n%3', strFmt('Исходное число: %1', a), strFmt('Восстановленное число из строки: %1', b), strFmt('Исходное число равно числу из строки?: %1', c))); } В процессе эксперимента обратил внимание на то, что региональные настройки Аксапта считывает при старте приложения и далее в текущей сессии их не меняет (!) даже при изменении региональных настроек в панели управления. Такое поведение Аксапты отличается, например, от поведения Excel, где при смене локали c Russian на English (United States) наглядно видно, как в ячейке тут же меняются разделители тысяч с пробелов на запятые. Последний раз редактировалось Gustav; 30.04.2009 в 09:42. | 
|  | |
| За это сообщение автора поблагодарили: aidsua (1). | |
|  30.04.2009, 09:33 | #22 | 
| Ищущий знания... | Цитата:   
				__________________ "Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем | 
|  | |
| За это сообщение автора поблагодарили: Gustav (1). | |
|  30.04.2009, 15:09 | #23 | 
| Участник | 
			
			Gustav С целыми числами будет ошибка. StrFmt() в этом случае не создает дробной части. Получается лишнее деление на 100. Хотя, я не теряю надежды услышать РЕАЛЬНУЮ постановку задачи от автора темы   | 
|  | 
|  30.04.2009, 15:26 | #24 | 
| Moderator | Цитата: Цитата: 
		
			Сообщение от Gustav
			   Если исходное число целое, то его можно по ходу без напряжения превратить в real, сложив с 0. или умножив на 1. (точки важны!) или разделить на 1 (можно без точки): X++: int a = 1000000; strFmt('%1', a + 0.) // или strFmt('%1', a * 1.) // или strFmt('%1', a / 1 ) // хоть по теории это и самый долгий вариант, // зато без точки :) Цитата:  P.S. Ну, впрочем, можно и допилить слегка, правда, в этом случае появляется зависимость еще и от исходного числа, а не только от промежуточной строки (бррр! бред какой-то!  ): X++:     b = str2Num(
            strFmt ( '%1e-%2',
                strKeep( strNumberAfterStrFmt, '-0123456789'),
                typeOf(a) == Types::Real ? 2 : 0
            ));Последний раз редактировалось Gustav; 30.04.2009 в 15:48. | 
|  | 
|  30.04.2009, 15:37 | #25 | 
| Участник | 
			
			Мы опять упираемся в ПОСТАНОВКУ задачи.  Вот нафига конвертировать в строку, чтобы потом опять конвертировать в число. Причем еще неизвестно где, по непонятным причинам, пока это была строка произошла замена пробела на неразрывный пробел. Может проще сразу число прочитать? | 
|  | 
|  30.04.2009, 17:33 | #26 | 
| Moderator | 
			
			Я примерно представляю, о чем может идти речь.  Например, об этом: Главная Книга \Запросы \Оборот по счету \Анализ счета. После задания параметров и кнопки ОК выводится форма "Анализ счета", в которой в колонках "Дебит" и "Кредит" как раз суммы в текстовом виде, с которыми мы боремся. Суммы превращаются в текст в методе insertRow класса RLedgerSheetEngine_AccountReview: X++: amount = ledgerTransDebit.exists(rowAccount) ? ledgerTransDebit.lookup(rowAccount) : 0; formListItem = new FormListItem(strRfix(strFmt("%1", amount), amountDictType.displayLength())); ... amount = ledgerTransCredit.exists(rowAccount) ? ledgerTransCredit.lookup(rowAccount) : 0; formListItem = new FormListItem(strRfix(strFmt("%1", amount), amountDictType.displayLength())); Чтобы получить сумму в первозданном виде, например, при щелчке по строке списка нужно будет считать из нее номер счета, выбрать мэп (дебитовый или кредитовый) и получить сумму при помощи map.lookup. Последний раз редактировалось Gustav; 30.04.2009 в 17:35. | 
|  | |
| За это сообщение автора поблагодарили: valentino (1). | |
|  04.05.2009, 15:12 | #27 | 
| Участник | 
			
			Я бы просто записал число "как есть" в соответствующий Item X++: formListItem.Data(amount); X++: print formListItem.Data(); | 
|  | 
|  05.05.2009, 14:07 | #28 | 
| Участник | 
			
			Владимир, если Вы внимательно будете читать все топики данной темы сначала, то постановка задачи станет Вам ясна. Gustav абсолютно точно ее понял. Вообще, я надеялся, что кто-то подскажет почему Аксапта при преобразовании из числа в строку втыкает тысячным разделителем обычный пробел (32) а не знак разделителя из панели управления (160) (я думал где-то есть тайные настройки). Но, в принципе считаю тему исчерпанной. Спасибо всем! | 
|  | 
|  05.05.2009, 15:55 | #29 | 
| Moderator | Цитата: Функция strFmt ведёт себя похоже на функции num2str и date2str. Похожесть заключается в числе прочего и в том, что в качестве разделителей (десятичных, тысяч, элементов даты) используются только разделители, "регламентированные" этими двумя функциями. Так разделителем тысяч в функции num2str может быть точка, запятая, ничего (пустая строка) или пробел, который с кодом 32. Поробуйте поставить в региональных настройках в качестве разделителя тысяч, скажем, букву x (икс латинская) - strFmt все равно будет использовать один из 4-х доступных разделителей - не могу сказать с уверенностью, какой именно - для какого "нерегламентированного" символа. Таким образом, согласно моей гипотезе, нерегламентированный пробел с кодом 160 "неудачно" заменяется на "регламентированный" пробел с кодом 32 - просто как на один из 4-х возможных вариантов, зашитых в функцию, вводя нас в заблуждение. Т.е. проблема существует, но корни, похоже, у нее совсем другие, чем просто "неряшливость" разработчиков функции strFmt. Видимо, можно говорить о том, что функция strFmt следует за региональными настройками только пока региональные настройки находятся с ней в "хорошем согласии" (совпадают разделители и проч.), позволяющем не замечать отклонений. К счастью, большинство настроек, находятся в хорошем согласии, а экспериментаторов, ставящих x в качестве разделителя тысяч не так много  Впрочем, если есть желание, присоединяйтесь к исследованию! | 
|  | 
| Теги | 
| разделитель тысячных, axapta | 
|  | 
|  Похожие темы | ||||
| Тема | Ответов | |||
| Разделитель страницы в MS WORD | 3 | |||
| Разделитель десятичных знаков в отчетах | 0 | |||
| 
 |