package main
import (
"fmt"
"strconv"
"strings"
"bufio"
"os"
"math"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
var tdjb string
tzxsa:=1.1
tzxsb:=0.45
for{
fmt.Print("请输入土地级别(1,2,3,4):")
fmt.Scanln(&tdjb)
jzdj:=基准地价(tdjb)
fmt.Print("请输入土地面积(多个面积用空格分开):")
scanner.Scan()
tdmjs := scanner.Text()
tdmjSum:=面积求和(tdmjs)
fmt.Print("请输入建筑面积(多个面积用空格分开):")
scanner.Scan()
jzmjs := scanner.Text()
jzmjSum:=面积求和(jzmjs)
rjl:=math.Round(jzmjSum/tdmjSum*100)/100
rjlxs:=容积率系数(rjl)
fmt.Println("土地总面积:",tdmjSum)
fmt.Println("建筑总面积:",jzmjSum)
fmt.Println("容积率为:",rjl,",容积率修正系数为:",rjlxs)
fmt.Println("土地级别为:住宅",tdjb,"级,基准地价为:",jzdj)
crj:=出让金(tdjb,jzdj,tdmjSum,rjlxs,tzxsa,tzxsb)
crj=math.Round(crj/1000)/10
fmt.Println("土地出让金大约为:",crj)}
}
func 容积率系数(rjl float64) float64 {
l1:=[]float64{1,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2,2.1,2.2,2.3,2.4,2.5,2.6,2.8,3,3.2,3.4,3.6,3.8,4,4.5,5}
l2:=[]float64{0.7932,0.8315,0.8707,0.9147,0.9578,1,1.0405,1.0792,1.1162,1.1515,1.185,1.2168,1.2468,1.2751,1.3017,1.3265,1.3496,1.3905,1.4245,1.4532,1.4819,1.5107,1.5394,1.5681,1.64,1.7118}
switch {
case rjl<=1.0:
return 0.7932
case rjl>=5.0:
return 1.7118
default:
for i,j:=range l1{
if rjl<j{
a2:=j
a1:=l1[i-1]
b1:=l2[i-1]
b2:=l2[i]
r:=(b2-b1)/(a2-a1)*(rjl-a1)+b1
return math.Round(r*10000)/10000
}
}
}
return 0
}
func 面积求和(s string)float64{
sl:=strings.Split(s, " ")
var sum float64
for _,vs:=range sl{
v,_ := strconv.ParseFloat(vs,64)
sum+=v
}
return sum
}
func 基准地价(jb string)float64{
switch{
case jb=="1":return 2640
case jb=="2":return 2250
case jb=="3":return 1425
case jb=="4":return 975
default: fmt.Println("土地级别输入错误!")
}
return 0
}
func 出让金(tdjb string ,jzdj,tdmjSum,rjlxs,tzxsa,tzxsb float64)(crj float64){
if tdjb=="1"|| tdjb=="2"{
crj=jzdj*rjlxs*tzxsa*tzxsb*tdmjSum
}else if tdjb=="3"|| tdjb=="4"{
crj=(jzdj*rjlxs*tzxsa*tzxsb+50)*tdmjSum
}
return
}