1、为什么不能用浮点数表示金额?
因为并不是所有的小数都可以用二进制表示,IEEE 745提出了一种用近似值表示小数的方法,有了精度的概念。也就是熟知的浮点数。
Java中十进制整数转二进制采用的是除2取余,逆序排列。小数采用的是乘二取整,顺序排列的方法。
所以浮点数是近似值,并不是精确值,不能用于对精度要求高的场景,否则会造成精度丢失的情况。
2、为什么不能用BigDecimal的equals方法做等值比较?
equals不仅比较~对象的值,同时还需要比较~的标度,比如1.0和1.00使用equals方法比较为false,所以我们做等值比较应该使用~提供的compareto方法。
一般构造~对象使用其入参为string类型的构造方法或者使用~的valueof 方法。
3、为什么对Java中的负数取绝对值结果不一定是正数?
出现这个情况是非常罕见的,仅出现在int和long的最小负数上,超出int或者long的取值范围,会发生越界。而Java是采用补码表示法表示有符号数字。超出范围后,第一位变为1,表示负数。超出后,程序并不会异常,所以在某些情况下,我们可以使用Math.obs()判断数字是否超出范围。超出范围的另行处理。