• java spring 用户等级乘阶算法


    import java.math.BigDecimal;
    
    import cn.hutool.core.lang.Console;
    import cn.hutool.core.thread.ConcurrencyTester;
    import cn.hutool.core.thread.ThreadUtil;
    
    /**
     * 根据剩阶计算出当前用户的单日提现额度
     */
    public class LevelUtil {
    	public static void main(String[] args) {
    		ConcurrencyTester tester = ThreadUtil.concurrencyTest(1, () -> {
    			// 测试的逻辑内容
    			for (int i = 0; i <= 65000; i += 500) {
    				BigDecimal[] data = LevelUtil.level(BigDecimal.valueOf(i));
    				ThreadUtil.sleep(200);
    				Console.log("充值金额:{},等级:{},提现额度: {}", i, data[0], data[1]);
    			}
    		});
    		// 获取总的执行时间,单位毫秒
    		Console.log(tester.getInterval());
    	}
    
    	// 每个等级,每次提现的额度配置
    	private final static BigDecimal[] levels = { // 提现额度升级
    			BigDecimal.valueOf(10), // level-1
    			BigDecimal.valueOf(100), // level-2
    			BigDecimal.valueOf(500), // level-3
    			BigDecimal.valueOf(800), // level-4
    			BigDecimal.valueOf(1200), // level-5
    			BigDecimal.valueOf(2000), // level-6
    			BigDecimal.valueOf(2800), // level-7
    			BigDecimal.valueOf(3200), // level-8
    			BigDecimal.valueOf(3700), // level-9
    			BigDecimal.valueOf(4000), // level-10
    			BigDecimal.valueOf(4500), // level-11
    			BigDecimal.valueOf(5500), // level-12
    			BigDecimal.valueOf(6000), // level-13
    			BigDecimal.valueOf(6500), // level-14
    			BigDecimal.valueOf(7500), // level-15
    			BigDecimal.valueOf(8000), // level-16
    			BigDecimal.valueOf(8500), // level-17
    			BigDecimal.valueOf(9000), // level-18
    			BigDecimal.valueOf(20000), // level-19
    			BigDecimal.valueOf(30000), // level-20
    			BigDecimal.valueOf(40000), // level-21
    			BigDecimal.valueOf(60000)// level-22
    	};
    	// 充值金额*倍数=能提现额度
    	private static final BigDecimal MULTIPLE = BigDecimal.valueOf(5);
    
    	public static BigDecimal[] level(BigDecimal currency) {
    		int currentlevel = 0;
    		for (BigDecimal quota : levels) {
    			if (currency.compareTo(quota) > -1) {
    				currentlevel++;
    			}
    		}
    		BigDecimal range = levels[currentlevel];// 当前充值额度范围
    		if (currentlevel < levels.length) {
    			return new BigDecimal[] { BigDecimal.valueOf(currentlevel), range.multiply(MULTIPLE) };
    		}
    		return new BigDecimal[] { BigDecimal.valueOf(currentlevel), range.multiply(MULTIPLE) };
    	}
    }
    

      

  • 相关阅读:
    面试题 31: 求子数组的最大和
    [面试] 结构体占用空间的问题,内存对齐~! 真的懂了,cpu取加快速度,省空间来考虑。
    [计算机] 32768~32767 计算机中的 1 表示
    C#跨线程调用窗体控件
    合并字节数组
    将汉字转化为2位大写的16进制Unicode
    关公与子龙两大杀手
    早年的J2EE笔记
    给小组新成员的一份信
    c++虚函数详解
  • 原文地址:https://www.cnblogs.com/light-zhang/p/14693028.html
Copyright © 2020-2023  润新知