官方实现
算法原理:
- 抢红包的期望收益应与先后顺序无关
- 保证每个用户至少能抢到一个预设的最小金额,人民币红包设置的最小金额一般是0.01元。如果需要发其他货币类型的红包,比如区块链货币或者积分,需要自定义一个最小金额。
2025年06月04日
算法原理:
2025年06月04日
前言:
接着上篇的文档来写继续写设计模式。
观察者模式定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。SpringBoot中的事件机制是观察者模式的典型应用,如ApplicationEvent和ApplicationListener。
2025年06月04日
如果基本的整数和浮点数精度不能满足需求,就可以使用java.math包中的两个很有用的类:
BigInteger和BigDecimal。这两个类可以处理任意长度的数值。BigInteger类实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点数运算。
使用静态的valueOf方法可以把普通的数值转换为大数值:
2025年06月04日
今天在计算库存消耗百分比(消耗的库存/总库存)的时候遇到了一个错误,
java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
2025年06月04日
1、两数相除无限循环小数问题
直接看例子01:
@Test
public void BigNumber_Test () {
BigDecimal bd = new BigDecimal("10");
BigDecimal divNum = new BigDecimal("3");
// 除法遇到除不尽时,这种写法会抛出异常ArithmeticException
BigDecimal bigDecimal = bd.divide(divNum); // NG java.lang.ArithmeticException
System.out.println(bd.divide(divNum, 2)); // OK
System.out.println(bd.divide(divNum, 2, BigDecimal.ROUND_UP)); // OK
System.out.println(bd.divide(divNum, 2, BigDecimal.ROUND_DOWN)); // OK
System.out.println(bd.divide(divNum, 2, BigDecimal.ROUND_CEILING)); // OK
System.out.println(bd.divide(divNum, 2, BigDecimal.ROUND_FLOOR)); // OK
System.out.println(bd.divide(divNum, 2, BigDecimal.ROUND_HALF_UP)); // OK
System.out.println(bd.divide(divNum, 2, BigDecimal.ROUND_HALF_EVEN)); // OK
System.out.println(bd.divide(new BigDecimal("4"), 2, BigDecimal.ROUND_UNNECESSARY)); // OK
}
2025年06月04日
加法:add 减法:subtract 乘法:multiply 除法:divide
BigDecimal bd1 = new BigDecimal("15");
BigDecimal bd2 = new BigDecimal("20");
BigDecimal bd3;
2025年06月04日
jBPM(Java Business Process Management)是一个开源的业务流程管理系统,它提供了一整套工具和服务来帮助开发者构建流程驱动的应用程序。本文将介绍如何使用 Spring Boot 和 jBPM 构建一个简单的请假申请流程,并详细介绍 jBPM 提供的一些核心 API 接口。
2025年06月03日
使用了CSS中类选择器,之前学习的是以结构为主,现在学习CSS主要的就是给结构做一套衣裳,让网页展示出来的效果更好看,更符合我们的观看,所以学习CSS是很重要的一门功课。网页做得好不好看,就看CSS学得怎么样。