Преобразовать текст в десятичную дробь (EVALUATE Navision)

У меня возникла проблема при попытке преобразовать текст в десятичное число. Прежде всего, я делаю извлечение значений между ; символ из поля в NAV (поле имеет тип Text)

My field value is: 9 469;2 178;0;-1 000;0;0;0;37 994,96;1 000;0;0;0;493,4;0;0;0;

При извлечении становится:

Example: 
9 469
2 178
-1 000
etc..

После извлечения мне нужно преобразовать текст в десятичное число:

CodeConvert := '9 469'

EVALUATE(Primo,DELCHR(CodeConvert,'=',' '));

Но при выполнении оценки я получаю сообщение об ошибке:

Microsoft Dynamics NAV

Значение "9 469" нельзя преобразовать в тип Decimal.

--------------------------- OK


person Jonathan Lam    schedule 27.01.2017    source источник
comment
Скорее всего символ между цифрами не является пробелом. Таб возможно.   -  person Mak Sim    schedule 27.01.2017


Ответы (3)


Я нашел проблему для этого. На самом деле был специальный символ, который NAV вставлял в пробел в десятичных дробях. Если вы когда-либо использовали delchr и визуально это пробел ' ', и он не удаляется.

Тогда ваш лучший друг — блокнот. Извлеките значение в блокноте, скопируйте и вставьте этот интервал ' ' в свою функцию delchr. Вывод: это был не пробел, а специальный символ, и, поскольку визуально он выглядел как пробел, первое впечатление было, что это пробел :)

Работал так для меня!

person Jonathan Lam    schedule 29.04.2017

Я пробую это и отлично работаю в NAV 2009, 2013, 2015 и 2016, это мой код:

CodeConvert := '9 469;2 178;0;-1 000;0;0;0;37 994,96;1 000;0;0;0;493,4;0;0;0;';
CodeConvert := COPYSTR(CodeConvert, 1, 5);
EVALUATE(Primo, DELCHR(CodeConvert, '=', ' '));
MESSAGE(FORMAT(Primo));

Попробуйте этот код и используйте отладчик, чтобы увидеть шаг за шагом:

CodeConvert := '9 469;2 178;0;-1 000;0;0;0;37 994,96;1 000;0;0;0;493,4;0;0;0;';
CodeConvert := COPYSTR(CodeConvert, 1, 5);
CodeConvert := DELCHR(CodeConvert, '=', ' '); //here your breakpoint
EVALUATE(Primo, CodeConvert);
MESSAGE(FORMAT(Primo));
person Jonathan Bravetti    schedule 27.01.2017

Как видите, функция EVALUATE прерывается на значении "9 469".

Но DELCHR должен удалить пробел ПЕРЕД вызовом EVALUATE.

Это только означает, что символы пробела в вашем значении и в delchar разные.

Выберите и скопируйте символ из «9 469» в третий аргумент в DELCHAR.

person xdd    schedule 31.01.2017