首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用BigDecimal乘100,哪种方法更好?

用BigDecimal乘100,哪种方法更好?
EN

Stack Overflow用户
提问于 2014-01-22 18:57:21
回答 1查看 11.8K关注 0票数 15

在这里,我有一个问题,当使用时。当我想为BigDecimal的一个对象乘以100时,哪种方法会更好。

  1. 乘以10倍;
  2. movePointRight(2);
  3. scaleByPowerOfTen(2);
  4. 还有别的办法吗?如果有,请告诉我。

顺便说一句,它将用于商业计算,所以我考虑的是精度而不是速度。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-22 19:14:48

选项3是最快的。选项1和2大致相同(选项一是乘以十倍)。乘以100,反而接近选项3的速度。

这是我的测试代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.math.BigDecimal;

public class TestingStuff {

    public static void main(String[] args){
        BigDecimal d2 = new BigDecimal(0); // to load the big decimal class outside the loop
        long start = System.currentTimeMillis();
        for(int i = 0; i < 1000000; i++) {
            BigDecimal d = new BigDecimal(99);
            d2 = 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(99);
            d2 = d.multiply(ten).multiply(ten);
        }
        end = System.currentTimeMillis();
        System.out.println("multiply: " + (end - start));

        start = System.currentTimeMillis();
        for(int i = 0; i < 1000000; i++) {
            BigDecimal d = new BigDecimal(99);
            d2 = d.scaleByPowerOfTen(2);
        }
        end = System.currentTimeMillis();
        System.out.println("scaleByPowerOfTen: " + (end - start));
    }

}

当然,您可以在自己的代码中自己尝试各种选项。如果你不能测量差异,那你为什么要优化呢?

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21298457

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文