2011-12-27 4 views
1

Есть ли способ выполнить кусок кода в зависимости от того, сколько десятичных знаков есть в количестве. Например, если double был всего 2.0, я хотел бы преобразовать его в целое число, но если бы это было 2.43426, я бы хотел оставить его как double. Благодаря!условия для If Else (с числом знаков после запятой)

+0

Можете ли вы привести пример того, как это было бы полезно? (имея в виду, что Java является статически типизированным языком) –

+0

Я бы преобразовал их в строки и записывал их, поэтому я хотел бы, чтобы он сказал 3 вместо 3.0, но не 3 вместо 3.4324. Возможно, я делаю это совершенно неправильно. Haha – Wilson

+0

. Тогда это вопрос форматирования для вывода? –

ответ

6

Не уверен, но будет:

double d = 2.0; 

if ((long) d == d) { 
    // then 
} 

Работа для вас? Это только ответит на ваш вопрос в этом конкретном случае.

+0

Я попробую; похоже, что это сработает. Я отвечу на ваш ответ, если это произойдет! – Wilson

+2

Вы должны использовать 'long', а не' int'. –

+0

Правда, это хороший совет. – jcxavier

0

Вы можете указать точность и преобразовать так:

double precision = 1e-10; 

int rounded = Math.round(x); 
if (Math.abs(x-rounded) > precision) System.out.print(x) 
else System.out.print(rounded); 
0
  1. Преобразование двойной в строку
  2. Использование регулярных выражений, найти десятичную точку, а затем получить количество символов после этого.
  3. использовать его в случае, еще
0

быстрый и грязный решение было бы следующее:

double foo = 2.43426; 
int count = String.valueOf(foo).split(".")[1].toCharArray().length; 
if(count > 1){ 
    // do stuff 
} 
0

Если это то, что вы после:

я бы преобразовал их в строки и записывал их, поэтому я хотел бы, чтобы он сказал 3 вместо 3.0, но не 3 вместо 3.4324.

Тогда «правильный» способ использует DecimalFormat:

DecimalFormat fmt = new DecimalFormat("0.#"); 
fmt.setMaximumFractionDigits(Integer.MAX_VALUE); 
assert "3".equals(fmt.format(3.0)); 
assert "3.4324".equals(fmt.format(3.4324)); 

Это, однако, локализовать десятичный разделитель (я получаю запятую, а не точку). Если это проблема, вы можете просто позвонить fmt.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.ROOT)).

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