我正在编写一个显示数字阶乘的小程序。 当我输入数字20时,我得到了数字2432902008176640000。
如何限制Java中的十进制数。
例如,编号2432902008176640000应为2432(限制4)。
提前致谢。
答案 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
注意:
long
只能在溢出之前表示与9223372036854775807一样大的值(它只是给定数字的4倍)。如果处理较大的数字,您需要切换到BigInteger或类似。可以使用相同的技术,针对语法差异进行更新。
正如fge指出的那样,这不会起作用,因为它是用负数写的;这可以通过改变条件(即n < -9999
)或首先获得n的绝对值(然后在结束时恢复操作)来解决。
正如在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));