| | |
| | | |
| | | /** |
| | | * 通过税后工资,算出税前工资 |
| | | * <p> |
| | | * 注意:除数必须用字符串/常量构造的精确值。原先写成 {@code new BigDecimal(0.84)} 等, |
| | | * 会把 double 的二进制误差带进除法(如 8313.06 / 0.84 变成 9896.500000…001), |
| | | * 再叠加向上取整就多出 1 分钱,导致“税后反算税前”无法还原(8300.00 类金额反解出 10000.03)。 |
| | | * |
| | | * @param money |
| | | * @return |
| | |
| | | } |
| | | //第一个参数是除数,第二个参数代表保留几位小数,第三个代表的是使用的模式 |
| | | if (money.doubleValue() > 800 && money.doubleValue() <= 3360) { |
| | | taxMoney = money.subtract(new BigDecimal(160)).divide(new BigDecimal(0.8), 2, BigDecimal.ROUND_CEILING); |
| | | taxMoney = money.subtract(new BigDecimal(160)).divide(new BigDecimal("0.8"), 2, BigDecimal.ROUND_CEILING); |
| | | } |
| | | |
| | | if (money.doubleValue() > 3360 && money.doubleValue() <= 21000) { |
| | | taxMoney = money.divide(new BigDecimal(0.84), 2, BigDecimal.ROUND_CEILING); |
| | | taxMoney = money.divide(new BigDecimal("0.84"), 2, BigDecimal.ROUND_CEILING); |
| | | } |
| | | |
| | | if (money.doubleValue() > 21000 && money.doubleValue() <= 49500) { |
| | | money = money.subtract(new BigDecimal(2000)); |
| | | taxMoney = money.divide(new BigDecimal(0.76), 2, BigDecimal.ROUND_CEILING); |
| | | taxMoney = money.divide(new BigDecimal("0.76"), 2, BigDecimal.ROUND_CEILING); |
| | | } |
| | | |
| | | if (money.doubleValue() > 49500) { |
| | | money = money.subtract(new BigDecimal(7000)); |
| | | taxMoney = money.divide(new BigDecimal(0.68), 2, BigDecimal.ROUND_CEILING); |
| | | taxMoney = money.divide(new BigDecimal("0.68"), 2, BigDecimal.ROUND_CEILING); |
| | | } |
| | | |
| | | |