繁体   English   中英

获取数字的前N位数

[英]Get first N digits of a number

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

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

例如,数字2432902008176640000应为2432(限制4)。

提前致谢。

如果您想要做的是我认为您想要做的事情,以下可能会做您想要的事情:

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

还有一个演示


笔记:

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

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

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

将N替换为限制。

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

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

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

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

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

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

你可以试试

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM