Java 获取数字的前N位

Java 获取数字的前N位,java,numbers,Java,Numbers,我正在写一个显示数字阶乘的小程序。 当我输入数字20时,结果得到了数字2432902008176640000 如何在Java中限制十进制数 例如,号码2432902008176640000应该是2432(限制4) 提前感谢。如果您想做的是我认为您想做的,那么以下内容可能会满足您的要求: long n = 2432902008176640000L; // original number while (n > 9999) { // while "more than 4 digits",

我正在写一个显示数字阶乘的小程序。 当我输入数字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


注:

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

  • 正如fge所指出的,这将不起作用,因为它是写在负数上的;这可以通过改变条件(即
    n<-9999
    )或首先获得n的绝对值(然后在最后恢复操作)来解决

  • 正如尹启文的回答一样,
    n>9999
    可以替换为
    n>=(long)Math.pow(10,n)
    (最好使用临时变量),其中n表示小数位数

  • 试试这个,可能会有帮助:

    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));      
    }
    

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

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

    将N替换为限制

    long v = 2432902008176640000L; 
    long x = (long) Math.pow(10, N);
    
    while(v >= x)
    {
       v /= 10;
    }
    

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

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

    使用string.valueof,然后使用substringView this:@user..wat是数据类型?类您可以检查…设施编号长度是固定的或可能会更改…?谢谢用户2864740!这是我问题的解决方案:-)注意,如果数字为负数,则此操作将失败;)修复边缘情况。