27.04.2009, 16:55 | #1 |
Участник
|
Разделитель тысячных
Привет всем!
Возникла проблема преобразования из текстового представления числа в само число, т.е. из "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 | 3 | |||
Разделитель десятичных знаков в отчетах | 0 |
|