Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!! / 25 сообщений из 27, страница 1 из 2
16.09.2005, 12:54:45
    #33273348
афффтар
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
chislo=int(chislo*100)/100- это как-то криво особенно в запросах
не подскажете как это сделать по-человечески
...
Рейтинг: 0 / 0
16.09.2005, 12:57:03
    #33273357
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
Код: plaintext
?INT( 2 . 5 )
...
Рейтинг: 0 / 0
16.09.2005, 13:30:01
    #33273491
Аффтар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
получается все пользуются .........
кривыми руками.......
если нуно преобразовать 10945435.3452305 в 10945435.34
а говорят -10945435 )))))
...
Рейтинг: 0 / 0
16.09.2005, 13:40:46
    #33273531
Maltsev Max
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
ROUND(<nExpression>, <nDecimalPlaces>)
где <nExpression> -- твое число которое нужно округлить
<nDecimalPlaces> количество знаков после запятой, до которого округляется ...
...
Рейтинг: 0 / 0
16.09.2005, 13:51:15
    #33273575
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
Maltsev MaxROUND(<nExpression>, <nDecimalPlaces>)
где <nExpression> -- твое число которое нужно округлить
<nDecimalPlaces> количество знаков после запятой, до которого округляется ...

Нет, для решеня этой задачи Round не годиться он округлит до .35

Код: plaintext
?ROUND( 10945435 . 3452305  , 2 )

У меня вопрос к афффтар он же аффтар откуда взялось такое число если считаются деньги, и почему если это результат арифметических операций промежуточные результаты не приводятся к "нормальному" виду.
...
Рейтинг: 0 / 0
16.09.2005, 14:08:34
    #33273643
Crispy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
В качестве полушутки (зато не рисуются лишние нули в запросах):
Код: plaintext
1.
?VAL(LEFT(STR( 10945435 . 3452305 , 12 , 3 ), 11 ))
...
Рейтинг: 0 / 0
16.09.2005, 14:12:29
    #33273654
Аффтар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
сумма по процентам в таблице
sum(a*.25)-увеличиваю колво знаков для большей точности
а round()- очень плохая фунция в этом плане,когда требуется точность
хотелось чтобы значение обрезалось по определенный знак,
а не округлялось......

а есть у кого нить идеи как это точность обеспечить.....
или где это найти?......
чтобы не изобретать велосипед....???????
или эт невозможно......???
...
Рейтинг: 0 / 0
16.09.2005, 14:13:22
    #33273659
Аффтар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
интересно однако)))
...
Рейтинг: 0 / 0
16.09.2005, 14:41:12
    #33273757
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
int(10945435.3452305*100)/100
...
Рейтинг: 0 / 0
16.09.2005, 14:45:43
    #33273785
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
int(10945435.3452305*100)*0.01

тынц?
...
Рейтинг: 0 / 0
16.09.2005, 14:47:44
    #33273795
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
это к вопросу о лишних нулях да и запросах быстрее
...
Рейтинг: 0 / 0
16.09.2005, 14:49:07
    #33273799
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
никогда не делите если можно умножить в программировании....
...
Рейтинг: 0 / 0
16.09.2005, 15:09:34
    #33273911
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
аффтархотелось чтобы значение обрезалось по определенный знак,
а не округлялось......

а есть у кого нить идеи как это точность обеспечить.....
или где это найти?......
чтобы не изобретать велосипед....???????
или эт невозможно......???
Есть такой тип данных - CURRENCY. Он именно обрезает. По 4 знаку после запятой. Причем обрезается результат каждой математической операции.

Проблема только в том, что этот тип данных плохо сочетается с типом данных Numeric.

Вот тебе пример

Код: plaintext
1.
2.
? 1 / 3 * 3 		&& это Numeric
?NTOM( 1 )/ 3 * 3 	&& это Currency

Ты хочешь получить не стандартное (с точки зрения FoxPro) округление при математических операциях. Значит, придется выдумывать что-то свое.

Проблема в том, что ты рассматриваешь данный конкретный случай: "Вот здесь мне надо отбросить, а не округлить". А надо ли так делать ВЕЗДЕ в твоей программе?

Насчет полушутки, можно и так:

Код: plaintext
1.
2.
SET DECIMALS TO  3 
?VAL(TRANSFORM( 123 . 456 ,"999999999.99"))
...
Рейтинг: 0 / 0
16.09.2005, 15:27:20
    #33274003
Crispy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
2 leaf :
leafэто к вопросу о лишних нулях да и запросах быстрее
Самое смешное - что в Фоксе символьные функции обрабатываются быстрее, чем математические

2 ВладимирМ :
Действительно, так лучше, даже элегантнее :).
...
Рейтинг: 0 / 0
16.09.2005, 15:52:42
    #33274121
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
Да ради бога всё это мелочи дерзайте ...
?VAL('1.1') && returns 1.10
?int(1.12*10)*0.1 && returns 1.1
...
Рейтинг: 0 / 0
19.09.2005, 09:18:08
    #33275856
Maltsev Max
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
Как я понял, не хочешь писать длинные функции в запросе.

Тогда вынеси обработку числа в пользовательскую функцию и в запросе и юзай ее в запросе ...

Кстати, как это отразится на скорости ?!?
...
Рейтинг: 0 / 0
20.09.2005, 00:48:46
    #33277691
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
Hi Maltsev Max!

> Тогда вынеси обработку числа в пользовательскую функцию и в запросе и юзай
> ее в запросе ...
> Кстати, как это отразится на скорости ?!?

Очень плохо.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
20.09.2005, 13:57:38
    #33278855
Daisy_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
ребята как войти в режим редактирования таблицы, когда коды видно,
Возникла следующая проблема:
под Fоx Pro написана база данных, отчет которой выходит Excel в определенной форме (документы стандарта бухгалтерии) и вот, надо сделать так чтобы формат данных выврдимых в ячейки был дробным
пример: 0,00/20,15
а выдает 0 / 20
округление не нужно и где это можно исправить?
заранее благодарна откликнувшимся :)
mice_r@74.ru
mice
@gmx.co.uk


НЕЗНАЮЩая ФОКСПРО ДАМА
...
Рейтинг: 0 / 0
20.09.2005, 22:14:03
    #33280007
Burn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
2Daisy_
После вывода в эксель задай соотвествующим колонкам нужный формат с запятыми:

oExcellApp.columns("O").NumberFormat = "0.00"
...
Рейтинг: 0 / 0
20.09.2005, 22:48:43
    #33280037
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
ВладимирМ Насчет полушутки, можно и так:

Код: plaintext
1.
2.
SET DECIMALS TO  3 
?VAL(TRANSFORM( 123 . 456 ,"999999999.99"))

Пользуюсь таким способом:
Код: plaintext
 ? val(str( 123 . 456 , 16 , 2 ))
Хотя в принципе - одно и тоже...
...
Рейтинг: 0 / 0
21.09.2005, 09:41:44
    #33280354
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
2Sergey Ch

авторПользуюсь таким способом:
? val(str(123.456,16,2))
Хотя в принципе - одно и тоже...

а почему не

?round(123.456,2)

ведь в принципе одно и то же....
...
Рейтинг: 0 / 0
21.09.2005, 11:14:09
    #33280643
Maltsev Max
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
Интересно, что
Код: plaintext
1.
2.
3.
? val(str( 123 . 456 , 16 , 2 ))
?VAL(TRANSFORM( 123 . 456 ,"999999999.99"))
?round( 123 . 456 , 2 )

Возвращают один и тот же результат

А если поставить

Код: plaintext
1.
SET DECIMALS TO  3 
То TRANSFORM() обрезает, а str() и round() округляют ...
...
Рейтинг: 0 / 0
21.09.2005, 12:10:41
    #33280850
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
leaf 2Sergey Ch

авторПользуюсь таким способом:
? val(str(123.456,16,2))
Хотя в принципе - одно и тоже...

а почему не

?round(123.456,2)

ведь в принципе одно и то же....
К сожалению, нет

Как уже упоминал Владимир - у денежного формата есть проблема - FoxPro все старается преобразовать к нему то есть точность 4 знака после запятой.

Во многих случаях нам нужна большая точность, непример при вычислении НДС (VAT) необходима точность 10-12 знаков после запятой, чтобы получать правильные и красивые денежные выражения при разбивки транзакций, например при оплате пластиковыми картами - приходит сумма одна, а надо ее дробить - часть на налог, часть в оплату товара... Причем сама сумма к оплате не всегда целая... Думаю, что Вы мысль поняли... Если делать все эти операции непосредственно с полями таблиц - то вылезают неправильная дробная часть при округлении по причине указанной выше. Если все делать "абстрактно", то все нормально
...
Рейтинг: 0 / 0
21.09.2005, 12:46:15
    #33280959
Crispy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
Sergey Ch ВладимирМ Насчет полушутки, можно и так:

Код: plaintext
1.
2.
SET DECIMALS TO  3 
?VAL(TRANSFORM( 123 . 456 ,"999999999.99"))

Пользуюсь таким способом:
Код: plaintext
 ? val(str( 123 . 456 , 16 , 2 ))
Хотя в принципе - одно и тоже...
Так ведь - не одно и тоже!
? val(str(123.456,16,2)) - просто напросто округляет до второго знака.
Обрезает же до второго знака либо:
?VAL(LEFT(STR(10945435.3452305,12,3),11))
либо то, что предложил взамен ВладимирМ.
И уж тем более не round().
...
Рейтинг: 0 / 0
23.09.2005, 01:03:40
    #33284878
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
Hi Sergey!

Задачи "распределения" суммы на части не решается через ROUND() и тем более
"простым делением". Ибо если 10/3 а потом снова сложить - то как ни
округляй, а копейка потеряется. А чтоб не терялась - нужен особый алгоритм
распределения. он уж знает куда копейку эту добавить, или откуда отнять...

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!! / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]