如何在Java中获取n位数的最大十进制值?

时间:2015-02-11 20:51:10

标签: java math

在我们的代码中,我们有一个十进制数字(如基数10)允许的最大位数(例如,8)。 如何使用此数字查看可能的值是否在该范围内(099,999,999)?

如果我们使用二进制数字,我会做类似的事情:

value < 1<<(MAX + 1)

但当然不适用于小数。我也考虑过这样的事情:

Long.toString(value).length() < MAX

但这似乎太沉重了。

4 个答案:

答案 0 :(得分:8)

if (value >= 0 && value < Math.pow(10, MAX))

答案 1 :(得分:3)

使用log base 10获取基数为10的数字

if ((int)(Math.log10(value) + 1) <= MAX) {
    ...
}

如果您无权访问log10,则可以使用普通日志执行此操作:

int length = (int)(Math.log(value) / Math.log(10)) + 1;
if (length <= MAX) {
    ...
}

请注意,这也适用于任何基础,因此使用上面的第二种方法,您可以将10替换为任何基数,并且您在给定基数中具有该数字的长度

答案 2 :(得分:1)

你可以拿10到第(n)个力量;

  value < (Math.pow (10, num_digits))

...对于正整数fixnums;如果你更关心幅度而不是符号,也许使用绝对值:

  Math.abs(value) < (Math.pow (10, num_digits))

当然,这不适用于浮点值或BigDecimal值,但相同(类似的,使用方法调用)适用于使用BigInteger的任意大的bignums。

答案 3 :(得分:0)

这会有用吗? val>=0 && (value/1000000000)==0