问题描述
我的BigDecimal
值为123.45
。我想将其转换为long
的{{1}}值,我想知道这样做的最佳方法是什么。
我宁愿避免做类似的事情
12345
解决方法
用于将BigDecimal用作字符串,并将字符串替换为“。”并做一个Long.valueOf
,只需发布此信息,以备不时之需。进行了性能测试,因为预期的字符串替换性能最差。
结果: movePointRight:1230 乘以833 scaleByPowerOfTen:591 字符串替换:3289
BigDecimal val = new BigDecimal(0);
long start = System.currentTimeMillis();
for(int i = 0; i < 1000000; i++) {
BigDecimal d = new BigDecimal(123.45);
val = d.movePointRight(2);
}
long end = System.currentTimeMillis();
System.out.println("movePointRight: " + (end - start));
BigDecimal ten = new BigDecimal(10);
start = System.currentTimeMillis();
for(int i = 0; i < 1000000; i++) {
BigDecimal d = new BigDecimal(123.45);
val = d.multiply(new BigDecimal(100));
}
end = System.currentTimeMillis();
System.out.println("multiply: " + (end - start));
start = System.currentTimeMillis();
for(int i = 0; i < 1000000; i++) {
BigDecimal d = new BigDecimal(123.45);
val = d.scaleByPowerOfTen(2);
}
start = System.currentTimeMillis();
for(int i = 0; i < 1000000; i++) {
BigDecimal d = new BigDecimal(123.45);
val = d.scaleByPowerOfTen(2);
}
end = System.currentTimeMillis();
System.out.println("scaleByPowerOfTen: " + (end - start));
start = System.currentTimeMillis();
for(int i = 0; i < 1000000; i++) {
BigDecimal d = new BigDecimal(123.45);
val = new BigDecimal(d.toString().replace(".",""));
}
end = System.currentTimeMillis();
System.out.println("String replacement: " + (end - start));