powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
27 сообщений из 27, показаны все 2 страниц
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
    #33273348
афффтар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chislo=int(chislo*100)/100- это как-то криво особенно в запросах
не подскажете как это сделать по-человечески
...
Рейтинг: 0 / 0
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
    #33273357
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
?INT( 2 . 5 )
...
Рейтинг: 0 / 0
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
    #33273491
Аффтар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
получается все пользуются .........
кривыми руками.......
если нуно преобразовать 10945435.3452305 в 10945435.34
а говорят -10945435 )))))
...
Рейтинг: 0 / 0
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
    #33273531
Maltsev Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ROUND(<nExpression>, <nDecimalPlaces>)
где <nExpression> -- твое число которое нужно округлить
<nDecimalPlaces> количество знаков после запятой, до которого округляется ...
...
Рейтинг: 0 / 0
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
    #33273575
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maltsev MaxROUND(<nExpression>, <nDecimalPlaces>)
где <nExpression> -- твое число которое нужно округлить
<nDecimalPlaces> количество знаков после запятой, до которого округляется ...

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

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

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

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

тынц?
...
Рейтинг: 0 / 0
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
    #33273795
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это к вопросу о лишних нулях да и запросах быстрее
...
Рейтинг: 0 / 0
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
    #33273799
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
никогда не делите если можно умножить в программировании....
...
Рейтинг: 0 / 0
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
    #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
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
    #33274003
Crispy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 leaf :
leafэто к вопросу о лишних нулях да и запросах быстрее
Самое смешное - что в Фоксе символьные функции обрабатываются быстрее, чем математические

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

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

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

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

Очень плохо.

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


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

oExcellApp.columns("O").NumberFormat = "0.00"
...
Рейтинг: 0 / 0
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
    #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
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
    #33280354
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Sergey Ch

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

а почему не

?round(123.456,2)

ведь в принципе одно и то же....
...
Рейтинг: 0 / 0
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
    #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
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
    #33280850
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
leaf 2Sergey Ch

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

а почему не

?round(123.456,2)

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

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

Во многих случаях нам нужна большая точность, непример при вычислении НДС (VAT) необходима точность 10-12 знаков после запятой, чтобы получать правильные и красивые денежные выражения при разбивки транзакций, например при оплате пластиковыми картами - приходит сумма одна, а надо ее дробить - часть на налог, часть в оплату товара... Причем сама сумма к оплате не всегда целая... Думаю, что Вы мысль поняли... Если делать все эти операции непосредственно с полями таблиц - то вылезают неправильная дробная часть при округлении по причине указанной выше. Если все делать "абстрактно", то все нормально
...
Рейтинг: 0 / 0
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
    #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
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
    #33284878
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Sergey!

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

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
    #33285600
Аффтар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А есть ли в инете материалы по алгоритмам разбивки?
Или все придумывать самому......???
...
Рейтинг: 0 / 0
Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
    #33285611
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor Korolyov нужен особый алгоритм
распределения. он уж знает куда копейку эту добавить, или откуда отнять...
Согласен, но я не привел полный текст задачи, которую решал:

Код: plaintext
1.
2.
3.
4.
5.
m.lcset_decimals=SET("Decimals")
SET DECIMALS TO  18 
m.lntmp_val=VAL(STR(m.lnchange2, 16 , 2 )) * VAL(STR(m.re_subtot, 16 , 2 ))/VAL(STR(m.Re_vatsum, 16 , 2 ))
m.lnpos_balanceVAL = - ROUND(m.lntmp_val, 2 )
m.lnpos_balanceVAT = - m.lnchange2 - m.lnpos_balanceVAL
SET DECIMALS TO &lcset_decimals
То есть проблема в нехватке точности при вычислениях... Наличие Y полей дает недостаточное округление до 4 знаков. И при больших суммах счет уже идет на десятки копеек
...
Рейтинг: 0 / 0
27 сообщений из 27, показаны все 2 страниц
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как правильно работать с денежным типом и в него преобразовывать!!!!!!!!!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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