避免输出科学计数法案例
JEP jep = new JEP();//好用的加减乘除计算工具类
jep.parseExpression(exxValue);
if (jep.hasError()) {
throw new ReportItemException(" 异常:" + jep.getErrorInfo());
}
Double amount = jep.getValue();
//校验Double值是否正常
if (Double.isInfinite(amount) || Double.isNaN(amount)) {
amount = 0.0;
}
//解决科学计数法问题
private final NumberFormat nf = NumberFormat.getInstance();
nf.setGroupingUsed(false);//要设置为false
nf.setMinimumFractionDigits(8);//保留几位,还有其他设置自行百度
//得到value
String value = nf.format(amount);
//Double 和 Float
* Infinity:无穷大
* NaN(Not a Number,非数)
Double.isNaN(amount)
Double.isInfinite(amount)
Float 也同理
//BigDecimal
12.打印
浮点数的打印
new BigDecimal("10000000000").toString();//10000000000
普通的数字字符串
new BigDecimal("100.000").toString();//100.000
去除末尾多余的0
new BigDecimal("100.000").stripTrailingZeros().toString();//1E+2
避免输出科学计数法-并不能完全避免,数字太大就完了
new BigDecimal("100.000").stripTrailingZeros().toPlainString()//100
BigDecimal bigDecimal = new BigDecimal("");//java.lang.NumberFormatException
BigDecimal 666= new BigDecimal(666);
1.加法
BigDecimal result1 = num1.add(num2);
2.减法
BigDecimal result2 = num1.subtract(num2);
3.乘法
BigDecimal result3 = num1.multiply(num2);
4.除法 @param:除数,保留几位小数,保留模式
divide(BigDecimal divisor,int scale, int roundingMode);//
5.比较
b1.compareTo(b2)//比较 大于 时,返回 1 等于 时,返回 0 小于 时,返回 -1
6. 2个数求最小
num1.min(num2) //求两个数的最小值,返回小的数
7. 2个数求最大
num1.max(num2) //求两个数的最大值,返回大的数
8. 0的定义
if (d2.compareTo(BigDecimal.ZERO) != 0)//判断不为0
9.保留小数
b.setScale(2, BigDecimal.ROUND_HALF_UP)// 保留小数位可以自动补0位
10.位数
int precision = bigDecimal.precision(); //获取数字是几位数
11.保留策略
BigDecimal.ROUND_DOWN:直接省略多余的小数,比如1.28如果保留1位小数,得到的就是1.2
BigDecimal.ROUND_UP:直接进位,比如1.21如果保留1位小数,得到的就是1.3
BigDecimal.ROUND_HALF_UP:四舍五入,2.35保留1位,变成2.4
BigDecimal.ROUND_HALF_DOWN:四舍五入,2.35保留1位,变成2.3
后边两种的区别就是如果保留的位数的后一位如果正好是5的时候,一个舍弃掉,一个进位。