Scala实现工资单计算器

在这个案列里利用Scala的map和fold,模拟进行了一个简单的工资计算。

object FoldExmple {
  case class  Emplee(
                    name:String,
                    title:String,
                    annualSalary:Double,
                    taxRate:Double,
                    inssurancePremiumsPerWeek:Double
                      )

  val employees=List(
        Emplee("Buck Trends","CEO",200000,0.25,100.0),
        Emplee("Cindy Banks","CFO",170000,0.22,120.0),
        Emplee("Buck Trends","Developer",130000,0.20,120.0)
  )
  def main(args: Array[String]) {
    //计算每周工资单:
     val netPay=employees map{e=>
        val net=(1.0-e.taxRate)*(e.annualSalary/52.0)-e.inssurancePremiumsPerWeek
      (e,net)//最后返回的就是map的结果
    }
    //打印工资单:
    println("####paychecks:")
    netPay foreach{
      case(e,net)=>println(f"${e.name+':'}%-16s ${net}%10.2f")
    }

    //生成报表
    val report=(netPay foldLeft(0.0,0.0,0.0)){
      case((totalSalary,totalNet,totalInsurance),(e,net))=>  //给参数添加名称
        (totalSalary+e.annualSalary/52.0,totalNet+net,totalInsurance+e.inssurancePremiumsPerWeek)//做一个匹配的累加
    }

    println("\n**Report:")
    println(f"Total Salary:     ${report._1}%10.2f")
    println(f"Total Net:        ${report._2}%10.2f")
    println(f"Total Insurance:  ${report._3}%10.2f")


  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值