Java 带十进制转换的 BigDecimal long

Java BigDecimal long with decimal conversion

我的 BigDecimal 值为 123.45。我想将其转换为 12345long 值,我想知道这样做的最佳方法是什么。

我宁愿避免做类似的事情 val.multiply(new BigDecimal(100)).toBigInteger()

用于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));