Java 获取数字的前N位
我正在写一个显示数字阶乘的小程序。 当我输入数字20时,结果得到了数字2432902008176640000 如何在Java中限制十进制数 例如,号码2432902008176640000应该是2432(限制4)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",
提前感谢。如果您想做的是我认为您想做的,那么以下内容可能会满足您的要求:
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倍)的值。如果处理较大的数字,您需要切换到或类似。可以使用相同的技术,针对语法差异进行更新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!这是我问题的解决方案:-)注意,如果数字为负数,则此操作将失败;)修复边缘情况。