public class MathUtils
extends java.lang.Object
| 限定符和类型 | 字段和说明 |
|---|---|
static double |
HUNDRED
百
|
static double |
MILLION
百万
|
static double |
ONE
一
|
static double |
TEN_THOUSAND
万
|
static double |
THOUSAND
千
|
| 构造器和说明 |
|---|
MathUtils() |
| 限定符和类型 | 方法和说明 |
|---|---|
static int |
addExact(int x,
int y)
计算两个参数的和,如果相加出现溢出那就返回
int的最大值. |
static long |
addExact(long x,
long y)
计算两个参数的和,如果相加出现溢出那就返回
long的最大值. |
static boolean |
adjacent(int x1,
int y1,
int x2,
int y2)
判定两点(x1,y1)和(x2,y2)是否相邻.
|
static boolean |
adjacent(Point p1,
Point p2)
判定两点P1(x1,y1)和P2(x2,y2)是否相邻.
|
static int |
ceilInt(double a)
向上取整,并返回int值.
|
static long |
ceilLong(double a)
向上取整,并返回long值.
|
static double |
distance(double x1,
double y1,
double x2,
double y2)
计算两点(x1,y1)到(x2,y2)的距离.
|
static double |
distance(int x1,
int y1,
int x2,
int y2)
计算两点(x1,y1)到(x2,y2)的距离.
|
static double |
distance(Point p1,
Point p2)
计算两点P1(x1,y1)到P2(x2,y2)的距离.
|
static int |
floorInt(double a)
向下取整,并返回int值.
|
static long |
floorLong(double a)
向下取整,并返回long值.
|
static double |
formatScale(double value,
int newScale)
格式化小数位数的方法.
|
static double |
formatScale(double value,
int newScale,
java.math.RoundingMode mode)
格式化小数位数的方法.
|
static float |
formatScale(float value,
int newScale)
格式化小数位数的方法.
|
static float |
formatScale(float value,
int newScale,
java.math.RoundingMode mode)
格式化小数位数的方法.
|
static double |
longToDouble(long value,
double ratio)
long类型的数值按比率转化为double类型的值.
|
static int |
multiplyExact(int x,
int y)
计算两个参数的乘积,如果相乘出现溢出那就返回
int的最大值. |
static long |
multiplyExact(long x,
long y)
计算两个参数的乘积,如果相乘出现溢出那就返回
long的最大值. |
static double |
percentage(long value)
long类型的数值以百分比转化为double类型的值.
|
static double |
permillage(long value)
long类型的数值以千分比转化为double类型的值.
|
static <T> java.util.Map<T,java.lang.Long> |
plunder(java.util.Map<T,java.lang.Long> resources,
long max,
java.util.Map<T,java.lang.Integer> ratio)
N种资源掠夺最优计算方案.
|
public static final double ONE
public static final double HUNDRED
public static final double THOUSAND
public static final double TEN_THOUSAND
public static final double MILLION
public static int addExact(int x,
int y)
int的最大值.
区别于JDK的方法,仅仅认同判定方案,游戏世界,溢出时那就修正一个合理的值,一般调用此方法的游戏逻辑决不能因异常而中断
x - 第一个参数y - 第二个参数Math.addExact(int, int)public static long addExact(long x,
long y)
long的最大值.
区别于JDK的方法,仅仅认同判定方案,游戏世界,溢出时那就修正一个合理的值,一般调用此方法的游戏逻辑决不能因异常而中断
x - 第一个参数y - 第二个参数Math.addExact(long, long)public static int multiplyExact(int x,
int y)
int的最大值.
区别于JDK的方法,仅仅认同判定方案,游戏世界,溢出时那就修正一个合理的值,一般调用此方法的游戏逻辑决不能因异常而中断
x - 第一个参数y - 第二个参数Math.multiplyExact(int, int)public static long multiplyExact(long x,
long y)
long的最大值.
区别于JDK的方法,仅仅认同判定方案,游戏世界,溢出时那就修正一个合理的值,一般调用此方法的游戏逻辑决不能因异常而中断
x - 第一个参数y - 第二个参数Math.multiplyExact(long, long)public static double distance(int x1,
int y1,
int x2,
int y2)
Math.sqrt(|x1-x2|² + |y1-y2|²)
x1 - 坐标X1y1 - 坐标Y1x2 - 坐标X2y2 - 坐标Y2public static double distance(double x1,
double y1,
double x2,
double y2)
Math.sqrt(|x1-x2|² + |y1-y2|²)
x1 - 坐标X1y1 - 坐标Y1x2 - 坐标X2y2 - 坐标Y2public static double distance(Point p1, Point p2)
Math.sqrt(|x1-x2|² + |y1-y2|²)
p1 - 坐标1p2 - 坐标2public static boolean adjacent(int x1,
int y1,
int x2,
int y2)
可用于两个AOI是否相邻判定
x1 - 坐标X1y1 - 坐标Y1x2 - 坐标X2y2 - 坐标Y2public static boolean adjacent(Point p1, Point p2)
可用于两个AOI是否相邻判定
p1 - 坐标1p2 - 坐标2public static int floorInt(double a)
a - 一个带有小数的数值public static long floorLong(double a)
a - 一个带有小数的数值public static int ceilInt(double a)
a - 一个带有小数的数值public static long ceilLong(double a)
a - 一个带有小数的数值public static float formatScale(float value,
int newScale)
采用了BigDecimal.setScale(int, RoundingMode)方式来保留小数位数
默认舍入方式为4舍5入, 参考RoundingMode.HALF_UP
value - 原始值newScale - 保留小数位数public static float formatScale(float value,
int newScale,
java.math.RoundingMode mode)
采用了BigDecimal.setScale(int, RoundingMode)方式来保留小数位数
value - 原始值newScale - 保留小数位数mode - 被保留位数后舍入方式,参考RoundingModepublic static double formatScale(double value,
int newScale)
采用了BigDecimal.setScale(int, RoundingMode)方式来保留小数位数
默认舍入方式为4舍5入, 参考RoundingMode.HALF_UP
value - 原始值newScale - 保留小数位数public static double formatScale(double value,
int newScale,
java.math.RoundingMode mode)
采用了BigDecimal.setScale(int, RoundingMode)方式来保留小数位数
value - 原始值newScale - 保留小数位数mode - 被保留位数后舍入方式,参考RoundingModepublic static <T> java.util.Map<T,java.lang.Long> plunder(java.util.Map<T,java.lang.Long> resources,
long max,
java.util.Map<T,java.lang.Integer> ratio)
有N种资源,尝试抢其他的部分,但各种资源有一定的比例...
使用场景:SLG的城池掠夺资源计算
T - 资源类型resources - N种资源(参数选用LinkedHashMap,就是想按顺序优先扣前面的...)max - 掠夺的最大值ratio - 掠夺比例建议:比例总和在100以内public static double longToDouble(long value,
double ratio)
由于配置表在转化中精度丢失问题,建议策划配置的是long类型的数值,所以就有了这个转化方法。
比如:约定XX列为百分比,那配置50,就是50%,等于0.5
value - long类型的数值ratio - 比率public static double permillage(long value)
value - long类型的数值public static double percentage(long value)
value - long类型的数值