gpt4 book ai didi

java - BigDecimal(java) 中指数表示法的缩放问题

转载 作者:行者123 更新时间:2023-12-01 09:20:10 25 4
gpt4 key购买 nike

在我们的应用程序中,我们需要检查给定的数字是否在范围内为此,我们使用以下代码 -

 boolean isValidRangeNumber(Double no,int precision, int scale){
BigDecimal bigDecimal = new BigDecimal(no.toString());
int intPartLength = precision - scale;
int size = (bigDecimal.longValue() + "").toString().length();

if(bigDecimal.precision() <= precision && bigDecimal.scale() <= scale && size <= intPartLength)
return true;

return false;
}

但是当我们调用 isValidRangeNumber(0.0000009, 10,7) 时,它会失败,因为 bigDecimal.scale() 给出的是 8,最大可能是 7,而它的有效号码。请提出这个 BigDecimal 用法有什么问题。

最佳答案

如果您检查以下内容:

bigDecimal.toPlainString() // This will show 0.00000090 -> scale of 8, appends trailing 0

由于额外的尾随零,以下条件的计算结果为 false。

bigDecimal.scale() <= scale // 8 <= 7

您可以更改为以下内容:

boolean isValidRangeNumber(Double no, int precision, int scale) {
BigDecimal bigDecimal = new BigDecimal(no.toString()).stripTrailingZeros(); //Get rid of trailing zeros
bigDecimal.toPlainString();
int intPartLength = precision - scale;

int size = (bigDecimal.longValue() + "").toString().length();

if (bigDecimal.precision() <= precision && bigDecimal.scale() <= scale
&& size <= intPartLength)
return true;

return false;
}

关于java - BigDecimal(java) 中指数表示法的缩放问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40215448/

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