Функция Double()

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Serges
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49

Функция Double()

Сообщение Serges »

В букваре "Средство разработки Атлантис. Арифметические выражения и функции. Часть 1" на стр.31 сказано, что при преобразовании строки в число, в случае ошибки, результат будет нулевым. А вот в каких случаях возможна такая ошибка? Для эксперимента в форме Стандартного складского ордера в секции .fields я заменил поле Summ на Double(Summ). Результат: половина спецификаций выходит с нулевой стоимостью :o
Галактика 8.10, Oracle 10g / 10.2.0.4
forummaster
Посетитель
Сообщения: 46
Зарегистрирован: 29 мар 2005, 17:49

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

Сообщение forummaster »

<HTML>В данном случае ошибка преобразования скорее всего из-за символа разделителя разрядов тысяч (`).
Попробуй такую конструкцию :
double( replace( string( Summ ),'`', '' ) )</HTML>
Serges
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49

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

Сообщение Serges »

Действительно, такая конструкция исправляет ситуацию :)
Галактика 8.10, Oracle 10g / 10.2.0.4
blackoff
Постоянный гость
Сообщения: 55
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Тверь/Москва
Контактная информация:

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

Сообщение blackoff »

Ну мало ли какая м.б. ошибка. Например разделитель дробной части не '.' , а ','
Посмотри, скорее всего в твоем случае, не выводятся чилса с разделителями разрядов.
например 10`234`102.00, т.е все что меньше 1000 у тебя нормально.
тогда можно написать следующее:
Double(Replace(Summ,'`',''))
blackoff
Постоянный гость
Сообщения: 55
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Тверь/Москва
Контактная информация:

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

Сообщение blackoff »

Черт... пока набирал уже forummaster отде самое ответил...... :-/
Serges
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49

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

Сообщение Serges »

forummaster, а вот такая загадка:

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

Причина тоже в преобразовании?
Если нет, какой сумме верить?
Пролучается, такой важный отчет, как "Наличие...", выдает, мягко говоря, не совсем верную информацию - либо по итогам, либо по строкам :o
Галактика 8.10, Oracle 10g / 10.2.0.4
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

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

Сообщение Den »

У меня в отчете наличия работники то же иногда нестыковочки наблюдают ;)
forummaster
Посетитель
Сообщения: 46
Зарегистрирован: 29 мар 2005, 17:49

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

Сообщение forummaster »

<HTML>Сергей сказал:
>
> forummaster, а вот такая загадка:

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

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

Приведите текст Вашей формы - посмотрим что Вы там делаете.</HTML>
Nick
Местный житель
Сообщения: 331
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Белгород

Сообщение 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 ''' - компилятор не кушает
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Сообщение Max_Fin »

А он и не должен "кушать" и компилить не должен

нужно так '''', т.е. вместо одного символа, два символа
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Сообщение Max_Fin »

А разделитель сумм может быть chr(96), может в этом проблема, пример числа кинте если не так.
Nick
Местный житель
Сообщения: 331
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Белгород

Сообщение Nick »

Тех поддержка подсказала наиболее простой вариант - поля для вывода, где надо убрать (') нужно делать цифровыми? если они строковые и если в шаблоне для этих полей стоит &'&&& - убрать из шаблона '
Nick
Местный житель
Сообщения: 331
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Белгород

Сообщение Nick »

replace(cur_per, '"', '');
replace(cur_per, chr(96), '');

не пашет

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

8'000.00
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Сообщение Max_Fin »

Как я понял cur_per объявлен в присоединенных формах к прототипу ReesBVip
он расчитывается так

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

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

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