2014-09-25 5 views
-3

Я пытался сравнить между десятичными знаками в поплавках с помощью операторов if, но я не знаю, как это сделать. Я много искал, но ответа не получил.Получение N-го десятичного числа плавающего

Например:

Если у меня есть поплавок, как этот 5.26, как я могу сказать, если второй десятичный (который 6) больше/меньше (определенное количество) или нет ?!

Надеюсь, что это понятно.

RE-ФОРМИРОВАНИЯ Qs:

Если у меня есть поплавок, которые имеют 2 числа после запятой, я хочу, чтобы проверить, если номер второй больше, чем «5» -для ПРИМЕР- или нет ?

+2

Что вы пробовали до сих пор? Попробуйте опубликовать [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve). – ericbn

+0

@ericbn К сожалению, я не смог сделать какой-либо код, но вот что я пытаюсь сделать: если у меня есть float, у которого есть 2 числа после десятичной точки, я хочу проверить, больше ли SECOND, чем 5 или нет?! Я не знаю, как это сделать. –

+1

Помните, что 5.26 не может быть точно представлено как значение с плавающей запятой. [Что каждый компьютерный ученый должен знать о арифметике с плавающей точкой] (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) –

ответ

4

Получение Nth -десятичной поплавки

Вот трюк для получения Nth знака после запятой поплавка:

  • Возьмите абсолютное значение
  • Умножить на 10 п
  • Ликвидированный int
  • Модуль на 10

Пример

Получение третьего десятичного знака 0.12438. Мы ожидаем, что ответ будет 4.

  • 0,12438
    • Возьмите абсолютное значение
  • 0.12438
    • Умножить на 10
  • 124 ,38
    • Cast к ИНТ
    • Modulus 10

Как это работает

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

Мы принимаем абсолютное значение, если вход отрицательный.

Код сниппета

float num = 0.12438f; 
int thirdDecimal = (int)(Math.abs(num) * Math.pow(10,3)) % 10; // Equals 4 
int fifthDecimal = (int)(Math.abs(num) * Math.pow(10,4)) % 10; // Equals 3 
+0

Вы имеете в виду 10 к власти n, или 10 XOR n? Потому что у вас есть последний. – Makoto

+0

@ Макото Упс. Спасибо, что поймал это. Некоторое время я не кодировал Java. – Rainbolt

+0

Кажется, что вы на C# (несколько, хотя я уверен, что он использует карету для XOR) - у вас есть «Pow», заглавный, когда этого не должно быть. Я знаю, что вы делаете, поэтому я отредактировал инструкцию умножения, но решил оставить код в покое. – Makoto

1

Не уверен, что это лучшее решение, но ...

Сделать строку его; Петля через строку; Проверьте, что вы хотите проверить.

1

Вы можете взять Double и вызвать toString на него, а затем перебрать charArray как этот

public class TestIndexOf { 
    public static void main(String[] args) { 
     Double d = 5.26; 
     String source = d.toString(); 

     char[] chars = source.toCharArray(); 

     char max = source.charAt(source.length() - 1); 
     boolean isMax = true; 
     for (char aChar : chars) { 
      if (max < aChar) { 
       max = aChar; 
       isMax = false; 
      } 
     } 
     System.out.println(max + " is max?" + isMax); 
    } 
} 
+0

Это не преобразование 'double' в' String'. Это берет 'Double' и конвертирует его в' String'. Тонкая разница. – Makoto

+0

@Makoto tx, обновлено – sol4me

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