浮点数 计算

  • 浮点数在计算机中是如何运算的?写代码时有什么要注意的?会有哪些坑?
    浮点数之间的等值判断,基本数据类型不能用==来比较,包装数据类型不能用 equals 来判断。

如果在业务代码中一旦涉及到诸如:订单金额、商品金额、交易值、货币运算等这种对精度要求很高的场景时,使用浮点数就一定要慎重了

System.out.println( 1f == 0.9999999f );   // 打印:false
System.out.println( 1f == 0.99999999f );  // 打印:true  ?
System.out.println( 1f == 0.999999999999f ); // 打印:true  ?
System.out.println( 5/2 ); //结果为2

//数据转换超预期
float f = 1.1f;
double d = (double) f;
System.out.println(f);  // 打印:1.1
System.out.println(d);  // 打印:1.100000023841858 ?

// 基本运算超预期

System.out.println( 0.2 + 0.7 ); 

alt

BigDecimal

构造器 描述

  • BigDecimal(int) 创建一个具有参数所指定整数值的对象。
  • BigDecimal(double) 创建一个具有参数所指定双精度值的对象。
  • BigDecimal(long) 创建一个具有参数所指定长整数值的对象。
  • BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象。

方法 描述

  • add(BigDecimal) BigDecimal对象中的值相加,然后返回这个对象。
  • subtract(BigDecimal) BigDecimal对象中的值相减,然后返回这个对象。
  • multiply(BigDecimal) BigDecimal对象中的值相乘,然后返回这个对象。
  • divide(BigDecimal) BigDecimal对象中的值相除,然后返回这个对象。
  • toString() 将BigDecimal对象的数值转换成字符串。
  • doubleValue() 将BigDecimal对象中的值以双精度数返回。
  • floatValue() 将BigDecimal对象中的值以单精度数返回。
  • longValue() 将BigDecimal对象中的值以长整数返回。
  • intValue() 将BigDecimal对象中的值以整数返回。