6
一、大数计算
Java 的 int 只有 32 位,long 只有 64 位,计算超大数会溢出出错。比如用 long 算 50 的阶乘会得到负数。解决办法是用 java.math.BigInteger,它支持任意大小的整数,常用方法有 add 加法、subtract 减法、multiply 乘法、divide 除法。
二、浮点数比较
计算机用二进制存浮点数,0.1 这类小数无法精确表示,所以不能用 == 比较两个浮点数。比如 0.1 加 0.2 实际等于 0.30000000000000004,用 == 判断等于 0.3 会得到 false。正确做法是看两数差值的绝对值是否小于 1e-10。
三、浮点数精确计算
金额计算这类对精度要求高的场景要用 java.math.BigDecimal,不能用 double。构造时必须传 String,不能传 double,否则精度问题还在。除法 divide 必须指定保留几位小数和舍入模式,常用四舍五入也就是 RoundingMode.HALF_UP。
四、总结
大数用 BigInteger,浮点数比较用差值小于 1e-10,精确小数用 BigDecimal 且用 String 构造。
浙公网安备 33010602011771号