gpt4 book ai didi

java - 如何检查 BigDecimal 的位数?

转载 作者:搜寻专家 更新时间:2023-10-31 08:08:14 24 4
gpt4 key购买 nike

要求是检查位数是否小于 7 位,在这种情况下插入 DB,否则不要插入。我尝试了以下解决方案:

第一种解决方案:

public static void checkNoOfDigitVal(BigDecimal bigDecVal) {
BigInteger digits = bigDecVal.toBigInteger();
BigInteger ten = BigInteger.valueOf(10);
int count = 0;
do {
digits = digits.divide(ten);
count++;
} while (!digits.equals(BigInteger.ZERO));
System.out.println("Number of digits : " + count);
}

第一个解决方案有时工作正常,但有时 while 循环中的条件不满足并且它不断增加计数导致无限计数。

第二种方案:

public static void checkNoOfDigitsVal(BigDecimal bigDecVal) {
String string = bigDecVal.toString();
String[] splitedString = string.split("\\.");
String[] newVal = splitedString[0].split("");
int a = newVal.length - 1;
if (a <= 6) {
System.out.println("correct size insert into DB: " + a);
} else {
System.out.println("Incorrect size insert cancel: " + a);
}
}

例如,如果值为 999999.9999,则第二个解决方案将返回 newVal.length = 6

请提出一个更好的解决方案来检查大十进制的位数,其中循环开销可以最小化。

最佳答案

你可以简单地使用:

static int integerDigits(BigDecimal n) {
n = n.stripTrailingZeros();
return n.precision() - n.scale();
}

精度是总位数,小数位数是小数点右边的位数,所以差就是小数点左边的位数.

编辑 有必要删除任何尾随零以获得正确的结果,例如0.000

编辑 2 或者(并向 @AdrianShum 确认),因为尾随零的问题仅在 0.00... 时出现,您可以使用:

static int integerDigits(BigDecimal n) {
return n.signum() == 0 ? 1 : n.precision() - n.scale();
}

现场演示 http://ideone.com/uI6iMG

关于java - 如何检查 BigDecimal 的位数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35792590/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com