在我们的代码中,我们有一个十进制数字(如基数10)允许的最大位数(例如,8
)。 如何使用此数字查看可能的值是否在该范围内(0
至99,999,999
)?
如果我们使用二进制数字,我会做类似的事情:
value < 1<<(MAX + 1)
但当然不适用于小数。我也考虑过这样的事情:
Long.toString(value).length() < MAX
但这似乎太沉重了。
答案 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
?