【性能】Java BigDecimal和double性能比较
程序员文章站
2022-06-08 20:31:35
...
我们知道 java 里面有个 BigDecimal ,可以解决我们的精度丢失问题。
但是很少关注其性能情况,因为一般来说可以忽略不计的。
也确实,解决大数据量运算 java 本身并不适合。
本人愚笨,很早之前用 java 解决一个大数据量运算的算法,对性能要求很高。中间用了 BigDecimal ,注意到其性能的一些情况,发现其性能是 double 的 100 倍左右。
具体没有去深究其原因,平时其实也不用对这个在意,但是对这个知识做个基本的了解还是有必要的。
直接上代码:
import java.math.BigDecimal; public class BigDecimalEfficiency { public static int REPEAT_TIMES = 1000000; public static double computeByBigDecimal(double a, double b) { BigDecimal result = BigDecimal.valueOf(0); BigDecimal decimalA = BigDecimal.valueOf(a); BigDecimal decimalB = BigDecimal.valueOf(b); for (int i = 0; i < REPEAT_TIMES; i++) { result = result.add(decimalA.multiply(decimalB)); } return result.doubleValue(); } public static double computeByDouble(double a, double b) { double result = 0; for (int i = 0; i < REPEAT_TIMES; i++) { result += a * b; } return result; } public static void main(String[] args) { long test = System.nanoTime(); long start1 = System.nanoTime(); double result1 = computeByBigDecimal(0.120000000034, 11.22); long end1 = System.nanoTime(); long start2 = System.nanoTime(); double result2 = computeByDouble(0.120000000034, 11.22); long end2 = System.nanoTime(); long timeUsed1 = (end1 - start1); long timeUsed2 = (end2 - start2); System.out.println("result by BigDecimal:" + result1); System.out.println("time used:" + timeUsed1); System.out.println("result by Double:" + result2); System.out.println("time used:" + timeUsed2); System.out.println("timeUsed1/timeUsed2=" + timeUsed1 / timeUsed2); } }
结果:
result by BigDecimal:1346400.00038148
time used:572537012
result by Double:1346400.000387465
time used:5280000
timeUsed1/timeUsed2=108
对比图:
从以上结果来看,bigDecimal的性能可见一斑。其性能竟然是double的100倍,这是很早之前没想到的。
上一篇: 微信小程序实现星级评分和展示
下一篇: 同事小周买了一个小艾音箱
推荐阅读
-
JAVA LinkedList和ArrayList的使用及性能分析
-
Java BigDecimal和double示例及相关问题解析
-
Java文件读写IO/NIO及性能比较详细代码及总结
-
mssql insert into 和insert into select性能比较
-
mssql insert into 和insert into select性能比较
-
MySQL两种表存储结构MyISAM和InnoDB的性能比较测试
-
浅谈MySQL和MariaDB区别(mariadb和mysql的性能比较)
-
Java日期时间API系列30-----Jdk8中java.time包中的新的日期时间API类,减少时间精度方法性能比较和使用。
-
MySQL两种表存储结构MyISAM和InnoDB的性能比较测试
-
用PHP连mysql和oracle数据库性能比较