BigDecimal 和 SimpleDateFormat 的问题

public class NumberAndTime {

    /**
     * scale 精度问题
     */
    public static void scaleProblem() {
        BigDecimal big = new BigDecimal("12.222");
//        BigDecimal result = big.setScale(2);   // 错误的,报异常
        BigDecimal result = big.setScale(2, BigDecimal.ROUND_HALF_UP);// 四舍五入
        System.out.println(result);

    }

    public static void divideProblem() {

//        System.out.println(new BigDecimal("30").divide(new BigDecimal("7"))); // 除不尽,抛出异常,必须指定精度
        System.out.println(new BigDecimal("30").divide(new BigDecimal("7"), 2, BigDecimal.ROUND_HALF_UP));
    }

    /**
     * 比较问题
     */
    public static void compareProblem() {
        BigDecimal b1 = new BigDecimal("0");
        BigDecimal b2 = new BigDecimal("0.0");

        System.out.println(b1.equals(b2));
        System.out.println(b1.compareTo(b2) == 0);

    }

    /**
     * SimpleDateFormat 可以解析大于或者等于它定义的时间精度
     *
     * @throws Exception
     */
    public static void formatPrecision() throws Exception {

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String time1 = "2021-01-01 00:01:01";
        String time2 = "2021-01";

        System.out.println(sdf.parse(time1));
        System.out.println(sdf.parse(time2));

    }

    /**
     * SimpleDateFormat 线程安全
     * 解决方案: 1. 局部变量 2. ThreadLocal 3. synchronized
     * @throws Exception
     */
    public static void threadSafe() throws Exception {

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(10,20,1, TimeUnit.MINUTES,
                new LinkedBlockingDeque<>(1000));

        while (true){
            threadPoolExecutor.execute(() ->{
                String date = "2021-01-01 00:01:01";
                try {
                    Date parseDate = sdf.parse(date);
                    String format = sdf.format(parseDate);
                    System.out.println(date.equals(format));
                } catch (ParseException e) {
                    e.printStackTrace();
                }
            });
        }

    }


    public static void main(String[] args) throws Exception {
//        scaleProblem();
//        divideProblem();
//        compareProblem();

//        formatPrecision();
        threadSafe();
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容