金额抵扣顺序的测试代码

     写个程序,测一个小功能, OK:

package main
import (
    "fmt"
    "sort"
    )

type Money struct {
    Principal int  // 第二优先级
    Interest  int  // 第一优先级
    Time      int  // 在同一优先级下,再利用时间优先级
}

func main() {
    p1 := &Money{100, 80, 2}
    p2 := &Money{70, 60, 1}
    p3 := &Money{90, 80, 2}
    arr := make([]*Money, 0, 0)
    arr = append(arr, p1, p2, p3)
    
    // 按时间排序
    sort.Slice(arr, func(i, j int) bool	{
        return arr[i].Time < arr[j].Time
	})
	
    repay := 240
    
    // 还款抵扣逻辑
    OUT:
    for j := 1; j <= 2; j++ {
         for _, v := range arr {
            if repay <= 0 {
                break OUT
            }
            
            if j == 1 {
                if v.Interest <= 0 {
                    continue
                }
                
                if repay <= v.Interest {
                    v.Interest -= repay
                    repay = 0
                    break OUT
                }else{
                    repay -= v.Interest
                    v.Interest = 0
                }
            }
            
            if j == 2 {
                if v.Principal <= 0 {
                    continue
                }
                
                if repay <= v.Principal {
                    v.Principal -= repay
                    repay = 0
                    break OUT
                }else{
                    repay -= v.Principal
                    v.Principal = 0
                }
            }
        }
    }
    
    fmt.Println(p1)
    fmt.Println(p2)
    fmt.Println(p3)
    fmt.Println(repay)
}

       结果:

&{100 0 2}
&{50 0 1}
&{90 0 2}
0

       不多说。

 

发布了2203 篇原创文章 · 获赞 4516 · 访问量 1960万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术工厂 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览