获取数字的前N位数

时间:2014-02-12 09:39:43

标签: java numbers

我正在编写一个显示数字阶乘的小程序。 当我输入数字20时,我得到了数字2432902008176640000。

如何限制Java中的十进制数。

例如,编号2432902008176640000应为2432(限制4)。

提前致谢。

6 个答案:

答案 0 :(得分:7)

以下可能会做你想要的,如果你想做的就是我想你想做的事情:

long n = 2432902008176640000L; // original number
while (n > 9999) {
   // while "more than 4 digits", "throw out last digit"
   n = n / 10;
}
// now, n = 2432

a demo


注意:

  1. long只能在溢出之前表示与9223372036854775807一样大的值(它只是给定数字的4倍)。如果处理较大的数字,您需要切换到BigInteger或类似。可以使用相同的技术,针对语法差异进行更新。

  2. 正如fge指出的那样,这不会起作用,因为它是用负数写的;这可以通过改变条件(即n < -9999)或首先获得n的绝对值(然后在结束时恢复操作)来解决。

  3. 正如在yinqiwen的回答中所做的那样,n > 9999可以替换为n >= (long)Math.pow(10, N)(最好使用临时变量),其中N代表小数位数。

答案 1 :(得分:3)

将N替换为限制。

long v = 2432902008176640000L; 
long x = (long) Math.pow(10, N);

while(v >= x)
{
   v /= 10;
}

答案 2 :(得分:2)

我假设你是一个数字的阶乘。 只需将数字转换为字符串,并使用substring方法仅获取前4位数字。 事实是因子价值

    String result_4_str=(fact+"").substring(0, 4);
    long result_4 = Long.parseLong(result_4_str);
    System.out.println(result_4);

答案 3 :(得分:1)

试试这个,可能有所帮助:

Long n = 2432902008176640000;
String num = String.valueOf(n);
num = num.subString(0, 4);
n = Long.valueOf(num);

答案 4 :(得分:1)

你可以尝试

long number = 2432902008176640000L ;
String numberStr = String.valueOf(number);      
if(numberStr.length()>=4){
    System.out.println(numberStr.substring(0, 4));      
}

答案 5 :(得分:0)

以前的一些循环答案是O(n)时间复杂度。这是一个恒定时间复杂度的解决方案:

long num = 2432902008176640000L;
int n = 4;
long first_n = (long) (num / Math.pow(10, Math.floor(Math.log10(num)) - n + 1));