编辑代码

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 // 出让金比例 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
}