2014-02-12 4 views
2

Я пишу небольшую программу, которая отображает факториал числа. Когда я ввожу число 20, я получил результат 2432902008176640000.Получить первые N цифр числа

Как ограничить десятичное число в Java.

Например, номер 2432902008176640000 должен быть 2432 (предел 4).

Заранее спасибо.

+0

использование String.valueOf и затем подстроки –

+0

Посмотреть это: http://stackoverflow.com/questions/8895337/how-do-i-limit-the -number-of-decimals-print-for-a-double – PaolaG

+0

@ user..waht является типом данных? –

ответ

7

Следующая может делать то, что вы хотите, если то, что вы хотите сделать, это то, что я думаю, что вы хотите сделать:

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

И a demo.


Примечание:

  1. long может представлять только значение, как большие, как 9223372036854775807 (что только около 4 раза больше, учитывая количество), прежде чем он будет переполнением. Если вы имеете дело с большими номерами, вам нужно переключиться на BigInteger или аналогичный. Та же методика может быть использована, обновлена ​​для различий синтаксиса.

  2. Как указано в fge, это не будет работать, поскольку оно написано над отрицательными числами; это может быть устранено либо изменением условия (то есть n < -9999), либо первым получением абсолютного значения n (и последующим возвратом операции в конце).

  3. Как сделано в ответе yinqiwen, n > 9999 может быть заменен на n >= (long)Math.pow(10, N) (предпочтительно с использованием временной переменной), где N - количество десятичных цифр.

+0

Спасибо пользователю2864740! Это решение моей проблемы :-) – user2773145

+0

Остерегайтесь того, что это не удастся, если число отрицательно;) – fge

1

Попробуйте это, может помочь:

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

Вы можете попробовать

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

Я предполагаю, что вы имеете в виду факториал числа. Просто преобразуйте число в строку и используйте метод подстроки, чтобы получить только первые 4 цифры. фактом является значение факториала

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

заменить N пределом.

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

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

Исправить для случаев краев. – yinqiwen

+0

+1 Более общий ответ, чем у меня :) – user2864740

0

Некоторые из предыдущих ответов с циклами - это сложность времени O (n). Вот решение для постоянной временной сложности:

long num = 2432902008176640000L; 
int n = 4; 
long first_n = (long) (num/Math.pow(10, Math.floor(Math.log10(num)) - n + 1)); 
Смежные вопросы