BG Development


Страници: (4) 1 [2] 3 4   ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> Смятане на данък в база данни, sqlite
thrawn
Публикувано на: 13-08-2019, 22:15
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3825
Регистриран на: 17.01.17



Ми кажи как де. Нали това питам icon_smile.gif
По горната схема не става с целочислено деление. А аз друго не измислих.

Ето примерни данни qty = 1000, price = 120, tax_amount = 2000. Трябва да се получи 100 (и 96 да получиш, пак се ядва, щото и двата варианта са включени в задачата).

Това мнение е било редактирано от thrawn на 13-08-2019, 22:20
PMEmail Poster
Top
dvader
Публикувано на: 14-08-2019, 08:03
Quote Post


Group Icon
Име: Валерий Тодоров
Група: VIP
Ранг: Почетен член

Мнения: 5404
Регистриран на: 12.07.05



Нещо не схванах, това което си написал са реално qty = 1.00, price 1.20, tax_amount = 20%... Та при това положение как получи 96? Аз получавам 0,24.

в integer случая имаш
1000 * 120 * 2000 / 1000 / 100 / 100


--------------------
I find your lack of faith disturbing
PM
Top
thrawn
Публикувано на: 14-08-2019, 08:36
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3825
Регистриран на: 17.01.17



96 е нетото.
Само че, така като го смяташ се смята отстъпка в проценти която не е включена в сумата. Проблемът реално се появява когато се вади вкючен процент (изчисляването на ДДС е такава операция).
PMEmail Poster
Top
dvader
Публикувано на: 14-08-2019, 10:15
Quote Post


Group Icon
Име: Валерий Тодоров
Група: VIP
Ранг: Почетен член

Мнения: 5404
Регистриран на: 12.07.05



Самата операция няма значение.
За да извадиш 20% от сумата (която вече сме я сметнали) просто накрая имаме деление, вместо умножение.
Сума = (1000 * 120) / 100 / данък * 100
Имаш едно /100 и *100, така че ги махаш и имаш:
1000 * 120 / 1200 == 100

int(qty * 1000) * int(price * 100) / int(1,2 * 100)
int (1.0 * 1000) * int(1,20 * 100) / int(1,2 * 100)


Това мнение е било редактирано от dvader на 14-08-2019, 10:16


--------------------
I find your lack of faith disturbing
PM
Top
Igbr
Публикувано на: 14-08-2019, 10:57
Quote Post



Име: Иван Братов
Група: Потребител
Ранг: Посетител

Мнения: 67
Регистриран на: 01.08.06



Така приемаш, че ДДС-то е 20% и използваш делението на 1.2
Но има и ставка 9%, а в бъдеще може да има и други

Аз го правя така:

Qty * (VatPrice / (VatRate / 100+1))

или в твоя случай

Qty/1000 * (VatPrice/100 / (VatRate/100 / 100+1))


--------------------
<cheers>
<Igbr>
PMEmail Poster
Top
thrawn
Публикувано на: 14-08-2019, 11:14
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3825
Регистриран на: 17.01.17



@dvader, бъркаш последната операция - трябва да е + а не *
CODE
Сума = (1000 * 120) / 100 / (данък + 100)


и стигаш до това в първия ми пост. Но пък, като умножа сумата по 10 почва да работи и без да се минава през float

(1000 * 120) * 10 / 100 / (20 + 100)

Май точно това се опитвах да изобретя icon_smile.gif
Са остава да го подкарам да работи с 4 числа за данък icon_smile.gif

---едит---
(1000 * 120) * 10 / 100 * 100 / (2000 + 100 * 100)


Това мнение е било редактирано от thrawn на 14-08-2019, 11:26
PMEmail Poster
Top
thrawn
Публикувано на: 14-08-2019, 13:26
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3825
Регистриран на: 17.01.17



Няма такава пръчка icon_smile.gif

Така работи https://www.db-fiddle.com/f/3fE1wfohe9E7jqHtbGmLUm/0 но когато сумата стане под стотинка закръглява до 0 https://www.db-fiddle.com/f/3fE1wfohe9E7jqHtbGmLUm/1 .
Ако вдигна точността с идеята, че ще закръгля в приложението работи идеално под стотинка https://www.db-fiddle.com/f/3fE1wfohe9E7jqHtbGmLUm/2 но изчисляването на данъкът се дъни https://www.db-fiddle.com/f/3fE1wfohe9E7jqHtbGmLUm/3

icon_mad.gif sqlite не става за тая работа. Отивам да пия кафе и да го мисля...
PMEmail Poster
Top
dvader
Публикувано на: 14-08-2019, 14:22
Quote Post


Group Icon
Име: Валерий Тодоров
Група: VIP
Ранг: Почетен член

Мнения: 5404
Регистриран на: 12.07.05



QUOTE (Igbr @ 14-08-2019, 10:57)
Така приемаш, че ДДС-то е 20% и използваш делението на 1.2
Но има и ставка 9%, а в бъдеще може да има и други

Абе аз се опитвам да му обясня как работи fixed point аритметиката а дали ще ползваш константа или променлива е отделна тема.


--------------------
I find your lack of faith disturbing
PM
Top
dvader
Публикувано на: 14-08-2019, 14:24
Quote Post


Group Icon
Име: Валерий Тодоров
Група: VIP
Ранг: Почетен член

Мнения: 5404
Регистриран на: 12.07.05



QUOTE (thrawn @ 14-08-2019, 11:14)
@dvader, бъркаш последната операция - трябва да е + а не *

Нищо не бъркам, при мен данъка не е 20% а 1.20 представено fixed point (120)
Сума без данък = Сума с данък / 1.20

Освен това, когато правиш събиране и изваждане трябва да работиш с еднаква точност.

Това мнение е било редактирано от dvader на 14-08-2019, 14:26


--------------------
I find your lack of faith disturbing
PM
Top
bvbfan
Публикувано на: 14-08-2019, 14:37
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 4169
Регистриран на: 08.12.13



dvader е прав, според мен, но аз все още не виждам защо да не ползваш float
https://stackoverflow.com/questions/9149063...l-places-always


--------------------
QUOTE (Bender @ 23-04-2015, 19:11)
Xamarin: ЛАПАЙ!
Ти: Добре...
PMEmail Poster
Top
0 потребители преглеждат тази тема в момента (0 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (4) 1 [2] 3 4  Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0