Java BigDecimal long,带有十进制转换

问题描述

我的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));