我正在编写一个小程序,用于显示一个数的阶乘。
当我输入数字20时,结果为2432902008176640000。
请问如何在Java中限制小数位数。
例如,数字2432902008176640000应该显示为2432(限制为4位)。
谢谢您的帮助。
我正在编写一个小程序,用于显示一个数的阶乘。
当我输入数字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倍),在处理更大的数字时,您需要切换到 BigInteger 或类似技术。相同的技术可以使用,更新语法差异。
正如 fge 指出的那样,此代码在负数上无法工作;可以通过更改条件(即 n < -9999
)或先获取 n 的绝对值(然后在最后恢复操作)来解决此问题。
如 yinqiwen 的答案中所做的那样,n > 9999
可以替换为 n >= (long)Math.pow(10, N)
(最好使用一个临时变量),其中 N 表示小数位数。
之前一些带有循环的答案的时间复杂度为O(n)。这里提供一种常数时间复杂度的解决方案:
long num = 2432902008176640000L;
int n = 4;
long first_n = (long) (num / Math.pow(10, Math.floor(Math.log10(num)) - n + 1));
尝试这个,可能会有帮助:
Long n = 2432902008176640000;
String num = String.valueOf(n);
num = num.subString(0, 4);
n = Long.valueOf(num);
long v = 2432902008176640000L;
long x = (long) Math.pow(10, N);
while(v >= x)
{
v /= 10;
}
我假设你是指一个数的阶乘。 只需将该数字转换为字符串,然后使用子字符串方法仅获取前4位数字。 fact是阶乘值。
String result_4_str=(fact+"").substring(0, 4);
long result_4 = Long.parseLong(result_4_str);
System.out.println(result_4);
long number = 2432902008176640000L ;
String numberStr = String.valueOf(number);
if(numberStr.length()>=4){
System.out.println(numberStr.substring(0, 4));
}