Java с использованием модов с плавающей точкой - PullRequest
2 голосов
/ 10 мая 2009

Я работаю над упражнением на Java. Я должен использовать / и % для извлечения цифр из числа. Число будет примерно таким: 1349.9431. Вывод будет что-то вроде:

1349.9431
1349.943
1349.94
1349.9

Я знаю, что это странный способ, но лабораторное упражнение требует этого.

Ответы [ 4 ]

7 голосов
/ 10 мая 2009

Давайте подумаем о том, что вы знаете. Допустим, у вас есть число 12345. Каков результат деления 12345 на 10? Каков результат взятия 12345 мод 10?

Теперь подумайте о 0.12345. Каков результат умножения этого на 10? Каков результат этого мода 10?

Ключ в этих ответах.

2 голосов
/ 10 мая 2009

Если x - это ваш номер, вы можете сделать что-то вроде x - x% 0.1, чтобы получить 1349.9, затем x - x% .0.01, чтобы получить 1349.94 и так далее. Хотя я не уверен, что делать мод на поплавках довольно необычно для начала, но я думаю, что так должно быть.

x - x% 10 определенно даст вам 1340, а x - x% 100 = 1300 точно.

1 голос
/ 10 мая 2009

Ну, в любом случае, работа будет выполняться в фоновом режиме, так зачем даже беспокоиться, просто распечатайте ее.

float dv = 1349.9431f;
System.out.printf("%8.3f %8.2f %8.1f", dv, dv, dv);

В качестве альтернативы это может быть заархивировано с помощью:

float dv = 1349.9431f;
System.out.println(String.format("%8.3f %8.2f %8.1f", dv, dv, dv));
0 голосов
/ 12 мая 2009

Это вопрос домашней работы, поэтому делать что-то, как вы на самом деле делаете в реальном мире (то есть, используя метод форматирования String, как Маргус сделал ), не разрешается. Я вижу три ограничения на любой ответ с учетом того, что содержится в вашем вопросе (если это не действительно ограничения, вам нужно перефразировать свой вопрос!)

  1. Должен принимать число с плавающей точкой как вход (и, если возможно, использовать только числа с плавающей точкой)
  2. Необходимо использовать оператор остатка (%) и деления (/)
  3. Входное число с плавающей точкой должно иметь четыре цифры до и после десятичной точки и, тем не менее, давать правильный ответ.

Ограничение 1. - это полная боль, потому что вы будете очень легко бить себя по точности с плавающей запятой, если вам придется использовать число из четырех цифр до и после десятичной запятой.

float inputNumber = 1234.5678f;
System.out.println(inputNumber % 0.1);

печать "0.06774902343743147"

приведение входного числа к двойному вызывает больше головной боли:

float one = 1234.5678f;
double two = (double) one;

печатает "1234.5677490234375" (примечание: при округлении ответа вы получите 1234.5677, что! = 1234.5678)

Если честно, меня это действительно озадачило, я потратил слишком много времени, пытаясь понять, как обойти проблему точности. Я не смог найти способ заставить эту программу работать для 1234.5678f, но она работает для значения asker 1349.9431f.

float input = 1349.9431f;

float inputCopy = input;
int numberOfDecimalPoints = 0;
while(inputCopy != (int) inputCopy)
{
  inputCopy = inputCopy * 10;
  numberOfDecimalPoints++;
}

double inputDouble = (double) input;

double test = inputDouble * Math.pow(10, numberOfDecimalPoints);
long inputLong = Math.round(test);

System.out.println(input);
for(int divisor = 10; divisor < Math.pow(10, numberOfDecimalPoints); divisor = divisor * 10)
{
  long printMe = inputLong - (inputLong % divisor);
  System.out.println(printMe / Math.pow(10, numberOfDecimalPoints));
}  

Из моих трех ограничений я удовлетворил 1 (вид), 2, но не 3, поскольку он сильно зависит от стоимости.

Мне очень интересно посмотреть, что могут придумать другие ТАКИЕ люди. Если спрашивающий правильно разобрал инструкции, это очень плохое упражнение, ИМО.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...