如何获得 BigDecimal 的第一个非零数字

How to get first non-zero digit of a BigDecimal

在 java 中如何获取 BigDecimal 的第一个非零数字?

例如:

0.001 => 1
0.02 => 2
987.654 => 9

对于 0 到 1 之间的数字,这将起作用:

bigDecimal.scaleByPowerOfTen(bigDecimal.precision()).setScale(0, RoundingMode.DOWN)

对于大于 1 的数字,这将起作用:

bigDecimal.scaleByPowerOfTen(1-bigDecimal.precision()).setScale(0, RoundingMode.DOWN)

但是有没有适用于任何数字的解决方案?

可以将 BigDecimal 转换为 char[] 并使用循环检查数字。看下面的例子。

    BigDecimal bigDecimal = new BigDecimal(5220.33);

    char[] chars = String.valueOf(bigDecimal).toCharArray();
    for (char c : chars) {
        if (Character.isDigit(c) ? Character.getNumericValue(c) != 0 : false) {
            System.out.println("First number is : " + c);
            return;
        }
    }

这是一个仅使用 BigDecimalint 的解决方案:

BigDecimal value = new BigDecimal(0.021); //input your value here

int scale = value.scale();
int precision = value.precision();
int result = value.movePointLeft(precision-scale-1).abs().intValue(); //this will generate the result you need