0

我正在尝试使用if循环('因为这就是我所知道的)计算税收分析(PAYE),第一个和最后一个循环工作正常,但为第二个、第三个和第四个循环返回 0。

我尝试对输入变量进行四舍五入,它可以工作,但我得到了不被接受的错误小数。

import numpy

#TAXABLE = 200333.33
#TAXABLE = 282645.83
#TAXABLE = 65203.83
#TAXABLE = 133364.58
#TAXABLE = 20495.83
#TAXABLE = 147083.33
#TAXABLE = 10328.83
#TAXABLE = 223908.33
#TAXABLE = 3504.75
#TAXABLE = 890.33
TAXABLE = 119270.83
TAX_INCOME = TAXABLE
#TAX_INCOME = round(TAXABLE)
#TAX_INCOME
TAX=0
#PAYE = 25000
LIMIT1 = 25000
LIMIT2 = 25000
LIMIT3 = 41666.67
LIMIT4 = 41666.67
LIMIT5 = 133333.34


#PERCENTAGE
RATE1=0.07
RATE2=0.11
RATE3=0.15
RATE4=0.19
RATE5=0.21
RATE6=0.24

#CALCULATION
if TAX_INCOME <= 25000:
    TAX1=0
    TAX = TAX_INCOME*RATE1 + TAX1
    if TAX < (0.01*TAXABLE):
        TAX = (0.01*TAXABLE)
if TAX_INCOME in numpy.arange(25001,50001):
    TAX1 = LIMIT1*RATE1
    TAX2 = (TAX_INCOME-25000)*RATE2
    TAX = TAX1 + TAX2
if TAX_INCOME in numpy.arange(50001,91667.67):
    TAX1 = LIMIT1*RATE1
    TAX2 = LIMIT2*RATE2
    TAX3 = (TAX_INCOME-50000)*RATE3
    TAX = TAX1+TAX2+TAX3
if TAX_INCOME in numpy.arange(91667.67, 133334.33):
    TAX1 = LIMIT1*RATE1
    TAX2 = LIMIT2*RATE2
    TAX3 = LIMIT3*RATE3
    TAX4 = (TAX_INCOME-91666.67)*RATE4
    TAX = TAX1+TAX2+TAX3+TAX4
if TAX_INCOME in numpy.arange(133334.34, 266667.68):
    TAX1 = LIMIT1*RATE1
    TAX2 = LIMIT2*RATE2
    TAX3 = LIMIT3*RATE3
    TAX4 = LIMIT4*RATE4
    TAX5 = (TAX_INCOME-133333.34)*RATE5
    TAX = TAX1+TAX2+TAX3+TAX4+TAX5
if TAX_INCOME>=266667.68:
    TAX1 = LIMIT1*RATE1
    TAX2 = LIMIT2*RATE2
    TAX3 = LIMIT3*RATE3
    TAX4 = LIMIT4*RATE4
    TAX5 = LIMIT5*RATE5
    TAX6 = (TAX_INCOME-266666.68)*RATE6
    TAX = TAX1+TAX2+TAX3+TAX4+TAX5+TAX6

#result = format(TAX)
result = "{0:.2f}".format(TAX)
result

我预计:

  • 65203.83 返回 6780.57;
  • 133364.58返回18673.23;
  • 147083.33返回21554.17

但我的代码一直返回 0.00。

4

2 回答 2

1

我认为问题出在以下条件中numpy.arange

if TAX_INCOME in numpy.arange(91667.67, 133334.33):

要求它TAX_INCOME位于一组定义为 91667.67 + 1、91667.67 + 2、...、133334.67 的值中。我认为您的意图会更好地表达为:

if 91667.67 < TAX_INCOME  <= 133334.33:

如果您以上述方式更改所有条件,您将获得预期的结果。

于 2019-08-30T10:57:26.060 回答
0

numpy.arange 将返回一个间隔为 1 的值数组(除非您指定不同的步骤)。

像这样更改您的 if 语句:

if TAX_INCOME in numpy.arange(91667.67, 133334.33):

if TAX_INCOME in >= 91667.67 and TAX_INCOME < 133334.33):

于 2019-08-30T11:02:06.623 回答