условия для If Else (с количеством десятичных знаков) - PullRequest
1 голос
/ 27 декабря 2011

Есть ли способ выполнить фрагмент кода в зависимости от количества десятичных разрядов в числе.Например, если бы double было всего 2.0, я бы хотел преобразовать его в целое число, но если бы оно было 2.43426, я бы хотел оставить его как двойное.Спасибо!

Ответы [ 5 ]

6 голосов
/ 27 декабря 2011

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

double d = 2.0;

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

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

0 голосов
/ 27 декабря 2011

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

Я бы конвертировал их в строки и выписывал их, поэтому я хотел бы, чтобы это было 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)).

0 голосов
/ 27 декабря 2011

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

double foo = 2.43426;
int count = String.valueOf(foo).split(".")[1].toCharArray().length;
if(count > 1){
    // do stuff
}
0 голосов
/ 27 декабря 2011
  1. Преобразование двойного в строку
  2. Используя регулярное выражение, найдите десятичную точку, а затем получите количество символов после этого.
  3. Используйте его в своем if-else
0 голосов
/ 27 декабря 2011

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

double precision = 1e-10;

int rounded = Math.round(x);
if (Math.abs(x-rounded) > precision) System.out.print(x)
else System.out.print(rounded);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...