2013-11-01 3 views
0

Сейчас я использую что-то вроде этого: В принципе программа должна печати X (правая цифра в #) до X знаков после запятой, например:Как найти правильную цифру целого числа с java без использования числа% 10? посмотреть описание

  • введенной 3.56, должны дисплей 0000000000000003,560
  • вошел 56,7 должен показать: 000000000056,700000
  • ввод 1002.5 должен отображать 00000000000001002.50

но число % 10 , условие прямо сейчас принимает только номер без десятичных знаков, поэтому программа закрывается, если я ввожу номер с десятичными знаками Мне нужна только альтернатива для номера % 10.

double number; 
if (number % 10 == 1) 
System.out.printf("%020.1f\n",number); 
+0

немного маскирующего

+1

Я не понимаю, что он должен делать. Печать цифры на это число десятичных знаков не имеет смысла и не соответствует вашим примерам. Я не думаю, что вы правильно используете слова. –

+3

Ваш заголовок говорит «правильная цифра целого числа», но 'number' является' double'. Что именно вам нужно? – ajb

ответ

1

кажется, что вы ищете что-то вроде

System.out.printf("%020." + ((int) number) % 10 + "f\n", number); 

((int) number) избавится от образования фракций 56.7 ->56, поэтому теперь вы можете безопасно использовать %10, чтобы получить последнюю цифру.

DEMO

+0

hmm Позвольте мне попробовать, что –

+0

IT WORKS THANKS @ –

+0

Добро пожаловать :) – Pshemo

0

Из числа в формате:

ABCDEX.FGHI 

вы можете извлечь X по:

int x = (int) original; //get rid of what is after the decimal point 
//now x is ABCDEX 
x = x % 10; 
//now x is X 

теперь вы можете присоединиться к этому Int шпагатом, чтобы создать шаблон для Printf.

0

Основе из оригинального поста, казалось, не было разрешено использовать мод, так вот как я бы сделал это: работает

private void transform(Double number) 
{ 
    int result; 
    int x = number.intValue(); 

    if (x < 10) 
    { 
     result = x; 
    } 
    else 
    { 
     Double y = x/10.0; 
     int z = y.intValue(); 
     result = x-10*z; 
    } 

    System.out.printf("%020." + result + "f\n", number); 
} 

Тест:

transform(3.56); 
transform(56.7); 
transform(1002.5); 

Печать:

0000000000000003,560
0000000000056,700000
00000000000001002,50

EDIT:
Если я неправильно и вам разрешено использовать моды, то ответ прост:

private void transform(Double number) 
{ 
    System.out.printf("%020." + ((int) number) % 10 + "f\n", number); 
} 

, как другие предложили. Извините, если я неправильно понял.

+0

в порядке, дайте мне посмотреть, работает ли он –

+0

ЭТО РАБОТАЕТ СПАСИБО @! –

1

Если я интерпретировал ваш вопрос правильно, то это выглядит, как он делает то, что вы спрашиваете:

public void test() { 
    strangePrint(3.1415); 
    strangePrint(2.0); 
    strangePrint(2.1); 
    strangePrint(2.2); 
    strangePrint(2.999); 
    strangePrint(37.4); 
    strangePrint(3.56); 
    strangePrint(56.7); 
    strangePrint(1002.5); 
} 

private void strangePrint(double d) { 
    // Get the integer part 
    int n = (int)d; 
    // The last digit of the integer defines the decimal places. 
    int digits = n%10; 
    System.out.printf("%020."+digits+"f\n", d); 
} 

печатает

0000000000000003.142 
00000000000000002.00 
00000000000000002.10 
00000000000000002.20 
00000000000000003.00 
000000000037.4000000 
0000000000000003.560 
0000000000056.700000 
00000000000001002.50 
+0

@BrianDo Я думал, вы сказали, что не можете использовать оператора мод. Если это так, мое решение работает. –

+0

Я могу использовать его, но я думал, что есть другой способ, позвольте мне попробовать –

Смежные вопросы