Страница 1 из 1

Функция Double()

Добавлено: 16 янв 2004, 11:31
Serges
В букваре "Средство разработки Атлантис. Арифметические выражения и функции. Часть 1" на стр.31 сказано, что при преобразовании строки в число, в случае ошибки, результат будет нулевым. А вот в каких случаях возможна такая ошибка? Для эксперимента в форме Стандартного складского ордера в секции .fields я заменил поле Summ на Double(Summ). Результат: половина спецификаций выходит с нулевой стоимостью :o

Re: Функция Double()

Добавлено: 16 янв 2004, 12:04
forummaster
<HTML>В данном случае ошибка преобразования скорее всего из-за символа разделителя разрядов тысяч (`).
Попробуй такую конструкцию :
double( replace( string( Summ ),'`', '' ) )</HTML>

Re: Функция Double()

Добавлено: 16 янв 2004, 12:33
Serges
Действительно, такая конструкция исправляет ситуацию :)

Re: Функция Double()

Добавлено: 16 янв 2004, 12:53
blackoff
Ну мало ли какая м.б. ошибка. Например разделитель дробной части не '.' , а ','
Посмотри, скорее всего в твоем случае, не выводятся чилса с разделителями разрядов.
например 10`234`102.00, т.е все что меньше 1000 у тебя нормально.
тогда можно написать следующее:
Double(Replace(Summ,'`',''))

Re: Функция Double()

Добавлено: 16 янв 2004, 12:56
blackoff
Черт... пока набирал уже forummaster отде самое ответил...... :-/

Re: Функция Double()

Добавлено: 04 фев 2004, 12:14
Serges
forummaster, а вот такая загадка:

В "ВЕДОМОСТИ НАЛИЧИЯ (ЦЕНЫ ПО РАЗРЕЗУ В НАЦ. ВАЛЮТЕ)" (форма NAL_MOL_RAZ_NDE, прототип 'nal_ms') в цикле просто суммирую поле Summa3 и вывожу итог в форму.
Этот итог НЕ равен полю itogo3 из этой же формы ???

Причина тоже в преобразовании?
Если нет, какой сумме верить?
Пролучается, такой важный отчет, как "Наличие...", выдает, мягко говоря, не совсем верную информацию - либо по итогам, либо по строкам :o

Re: Функция Double()

Добавлено: 04 фев 2004, 13:35
Den
У меня в отчете наличия работники то же иногда нестыковочки наблюдают ;)

Re: Функция Double()

Добавлено: 04 фев 2004, 14:21
forummaster
<HTML>Сергей сказал:
>
> forummaster, а вот такая загадка:

Я не занимаюсь отгадыванием загадок ;)

> в цикле просто суммирую
> поле Summa3 и вывожу итог в форму.
> Этот итог НЕ равен полю itogo3 из этой же формы ???

Приведите текст Вашей формы - посмотрим что Вы там делаете.</HTML>

Добавлено: 24 июн 2005, 14:39
Nick
Добрый день! Имеем такую проблему: нужно в отчете заменьть разделители сумм на пустой сивол. Вариант, предложенный выше, почему-то не прокатывает - replace(string, '`', '' ) - но компилируется.

Написали для вышепоставленной цели кусок кода, в котором две части несут один функционал - удаление этого символа (' - разделитель сумм) по его коду. Причем первая часть кода (где replace) не работает. Вторая же (где замена в тупую) - работает нормально.

Код:

.begin
mystr01 := cur_per;
replace(cur_per, chr(39), '-');

p := pos(chr(39), mystr01);
mystr02 := SubStr (mystr01, 1, p-1);
mystr02 := mystr02 + SubStr (mystr01, p+1, length(mystr01));
mystr01 := mystr02;
end.

Вопрос - как сделать правильно через replace?
И исчо: replace ''' - компилятор не кушает

Добавлено: 24 июн 2005, 14:55
Max_Fin
А он и не должен "кушать" и компилить не должен

нужно так '''', т.е. вместо одного символа, два символа

Добавлено: 24 июн 2005, 15:03
Max_Fin
А разделитель сумм может быть chr(96), может в этом проблема, пример числа кинте если не так.

Добавлено: 24 июн 2005, 15:15
Nick
Тех поддержка подсказала наиболее простой вариант - поля для вывода, где надо убрать (') нужно делать цифровыми? если они строковые и если в шаблоне для этих полей стоит &'&&& - убрать из шаблона '

Добавлено: 24 июн 2005, 15:24
Nick
replace(cur_per, '"', '');
replace(cur_per, chr(96), '');

не пашет

Пример числа:

8'000.00

Добавлено: 24 июн 2005, 19:20
Max_Fin
Как я понял cur_per объявлен в присоединенных формах к прототипу ReesBVip
он расчитывается так

Код: Выделить всё

        cur_per:= DoubleToStr(Double(sum_per),'666''666''666''666''667')+ 
delimit
или почти так

ну раз не можете разобраться с replace, хотя не понятно почему? функция работает замечательно, ни разу не возникало проблем
воспользуйтесь полем Double(sum_per)