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();
}
}
BigDecimal 和 SimpleDateFormat 的问题
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 网上随便一搜,是这么写的: ROUND_CEILING Rounding mode to round toward...
- 之前在一本书上看到一个比较有意思的问题如下: 思考这个main方法执行会不会出现问题?运行结果如下:image.p...
- 背景 众所周知,Java中的SimpleDateFormat不是线程安全的,在多线程下会出现意想不到的问题。本文将...
- Stringres; SimpleDateFormat simpleDateFormat =new SimpleD...
- 今天遇到一个在华为mate7、小米5、三星上崩溃的问题代码是 崩溃原因是“YYYY”导致的,最后看SimpleDa...