用Go计算收入需要支付的所得税的程序(Golang)

204 阅读1分钟

概述

给出一个2d数组,代表所得税的档次。输入数组为brackets,其中

brackets[i] = [upperi, percenti]

表示第1个档次的上限为upperi,税率为 %。 brackets数组按上限排序。以下是计算税收的方法

  • 上限为0的钱按0%征税

  • upper1-upper0的税率为%1

  • ...以此类推

你也会得到收入作为输入。你必须计算出所得税。给出的是最后一个档次的上限大于收入。

例1

Input: brackets = [[4,10],[9,20],[12,30]], income = 10
Output: 1.7

例子2

Input: brackets = [[3,10]], income = 1
Output: 0.3

程序

以下是同样的程序

package main

import "fmt"

func calculateTax(brackets [][]int, income int) float64 {
	if income == 0 {
		return 0
	}

	var totalTax float64

	numBrackets := len(brackets)
	upper := 0
	for i := 0; i < numBrackets; i++ {

		if i == 0 {
			upper = brackets[i][0]
		} else {
			upper = brackets[i][0] - brackets[i-1][0]
		}

		taxPer := brackets[i][1]
		if income <= upper {
			totalTax += float64(income) * float64(taxPer) / 100
			break
		} else {
			totalTax += float64(upper) * float64(taxPer) / 100
			income = income - upper
		}
	}

	return totalTax
}

func main() {
	output := calculateTax([][]int{{4, 10}, {9, 20}, {12, 30}}, 10)
	fmt.Println(output)

	output = calculateTax([][]int{{3, 10}}, 10)
	fmt.Println(output)

}

输出:

1.7
0.3