Описание проблемы
В моем отчете я получаю суммы в строках.Форматирование довольно необычное:
- "" - это нулевая сумма
- "(200.00)" - отрицательная сумма
- "1,234.56" - это положительная сумма
Я хочу преобразовать эти строки в числовые значения более удобным способом:
- 0,00
- -200,00
- 1234,56
Сначала я выполняю некоторые предварительные форматированияколичество строк:
local stringvar amount := Trim({PLD__ITEMS.F_18});
if amount = ''
then amount := '0.00'
;
amount := Replace(amount, "(", "-");
amount := Replace(amount, ")", "");
amount := Replace(amount, ",", "");
amount := Replace(amount, " ", "");
Затем я хотел преобразовать строку в число, используя методы ToNumber или CDbl , но оба результата приводят к одной и той же ошибке
// "The string is non-numeric"
//ToNumber(amount)
// "The string is non-numeric"
//CDbl(amount)
Я понятия не имею, что могло вызвать эту ошибку.
Я не могу найти поврежденную строку в отформатированных количествах ...
![The string is non-numeric](https://i.stack.imgur.com/wKZfW.png)
Вопросы
- Как мне исправить количество строк, чтобы ToNumber и CDbl работали нормально?
- Как я могу преобразовать количество строк в десятичное число сиспользуя методы ToNumber или CDbl ?
Если возникла только проблема с отображением, я мог бы использовать строки как есть, но мне нужно сделать некоторые вычисленияс этими суммами, поэтому я должен использовать числовые значения там.
Тестирование неожиданных символов в количестве строк
Я подготовил специальный тест, чтобы проверить, есть ли внутри какого-либо значения суммы строк неожиданный символ внутри,но все результаты приведенного ниже сравнения вернули True
// ---- test ----
amount := Replace(amount, "0", "");
amount := Replace(amount, "1", "");
amount := Replace(amount, "2", "");
amount := Replace(amount, "3", "");
amount := Replace(amount, "4", "");
amount := Replace(amount, "5", "");
amount := Replace(amount, "6", "");
amount := Replace(amount, "7", "");
amount := Replace(amount, "8", "");
amount := Replace(amount, "9", "");
amount := Replace(amount, ".", "");
amount := Replace(amount, "-", "");
// has not unexpected characters
amount = ''
// ---- end test ----
Тестирование преобразования
Я протестировал явное преобразование строки с точкой в качестве десятичного разделителя и снова произошла ошибка (что для меня странно)!
![enter image description here](https://i.stack.imgur.com/BAlZU.png)
Я использую Crystal Reports 2013