java 几种保留小数位数的方法性能比较
来源:互联网 发布:重返北上广 知乎 编辑:程序博客网 时间:2024/06/05 18:58
Java 保留小数位数的方法主要有NumberFormat,Decimalformat,BigDecimal, 以及格式化输出等。下面我们来看一下这几种方法的具体写法。
NumberFormat
double a = 223.121233333;NumberFormat numberFormat = NumberFormat.getNumberInstance();numberFormat.setMaximumFractionDigits(5);numberFormat.setRoundingMode(RoundingMode.HALF_UP);System.out.println(numberFormat.format(a));
Decimalformat
Decimalformat是NumberFormat的子类,拥有更加强大的解析和格式化能力。支持不同类型的数字,比如整形(123),固定位数(123.1), 科学计数法(1.23E4), 百分数(12%),以及货币数量($123),这些类型都可以做本地化。我们简单的看一下如何保留小数位数:
DecimalFormat df = new DecimalFormat("#.######");df.setRoundingMode(RoundingMode.HALF_UP);
格式: #.###### 最多保留6位小数
#.000000, 保留6位,不足用0填充
BigDecimal
double b = new BigDecimal(a).setScale(6, RoundingMode.HALF_UP).doubleValue();
格式化输出:%.2f
String aaa = String.format("%.6f", a);
性能测试
static void testNumberFormat() { long start = System.currentTimeMillis(); double a = 124555.15678905678; NumberFormat numberFormat = NumberFormat.getNumberInstance(); numberFormat.setMaximumFractionDigits(5); numberFormat.setRoundingMode(RoundingMode.HALF_UP); for (int i = 0; i < 1000; i ++) { String aaa = numberFormat.format(a); } long end = System.currentTimeMillis(); System.out.println("testNumberFormat cost time: " + (end - start));}static void testDecimalFormat() { long start = System.currentTimeMillis(); double a = 124555.15678905678; DecimalFormat df = new DecimalFormat("#.######"); df.setRoundingMode(RoundingMode.HALF_UP); for (int i = 0; i < 1000; i ++) { String aaa = df.format(a); } long end = System.currentTimeMillis(); System.out.println("testDecimalFormat cost time: " + (end - start));}static void testBigDecimal() { long start = System.currentTimeMillis(); double a = 124555.15678905678; for (int i = 0; i < 1000; i ++) { double b = new BigDecimal(a).setScale(6, RoundingMode.HALF_UP).doubleValue(); } long end = System.currentTimeMillis(); System.out.println("testBigDecimal cost time: " + (end - start));}static void testStringFormat() { long start = System.currentTimeMillis(); double a = 124555.15678905678; for (int i = 0; i < 1000; i ++) { String aaa = String.format("%.6f", a); } long end = System.currentTimeMillis(); System.out.println("testStringFormat cost time: " + (end - start));}
测试输出:
testNumberFormat cost time: 58testDecimalFormat cost time: 16testBigDecimal cost time: 27testStringFormat cost time: 65
显然,DecimalFormat,BigDecimal都比较快,我们实际上使用时,可以采用这两个。
阅读全文
0 0
- java 几种保留小数位数的方法性能比较
- java 小数位数保留的几种方法
- 盘点JAVA保留小数位数的方法
- Java指定保留小数位数的方法
- java精确小数位数的几种方法
- java 小数保留2位的几种方法
- Java保留两位小数的几种方法
- java限制输入数据保留小数位数的方法
- java保留double类型固定小数位数的方法
- java中将double保留一定位数小数输出的方法
- java中保留小数位数的方法总结
- 初学Java:保留小数位数方法
- java 保留小数位数
- java 保留小数位数
- java保留小数位数
- C#保留小数位数的方法集锦
- C#保留小数位数的方法集锦
- C#保留小数位数的方法集锦
- Exact 4SAT问题是NP完全的证明
- 将css放在头部,js放在尾部可以优化页面???
- GO学习系列:单例
- js背景图自适应
- JRE System Library Problem J2SE-1.5问题
- java 几种保留小数位数的方法性能比较
- C/C++之回调函数详解
- centos7 mysql数据库安装和配置
- DatePicker 设置最小日期是当前时间报错:java.lang.IllegalArgumentException: fromDate:xxx does not preced toDate: xx
- 2017-07-04(状压DP:POJcorn field 3254)
- Zookeeper的watcher
- C 语言相关函数入门
- android Activity的跳转
- Servlet相关