2017-01-31 13 views
-1

Я пытаюсь преобразовать 32 цифр строки в десятичное ...Хотите преобразовать 32-битную строку IEEE в десятичную в Java.

Пример: "00111111100000000000000000000000"> 1 и "01000001101000000000000000000000"> 20

Я пытаюсь код ниже, но результат, который я получаю, абсолютно ошибочен. "00111111100000000000000000000000"> 2147483647

String s = "00111111100000000000000000000000" 
    float fl = Float.parseFloat(s); 
    int bits = Math.round(Math.abs(fl)); 
    decTextView.setText(Long.toString(bits)); 

Любой посоветуете?

+4

Почему вы идете с плавающей -> int -> long ???? выбрать один –

+0

- это значение с плавающей точкой или целое/длинное значение? Также ваши примеры не ясны. – Optimus

+0

Я хочу преобразовать 32-разрядную строку, представляющую 32-разрядную плавучую точку IEEE с десятичной точкой. Как изменить приведенный выше код? –

ответ

0

Вам нужно сделать три вещи.

  • Считать 0 и 1 в строке как int.
  • Используйте intBitsToFloat для преобразования int в float.
  • Преобразование float в десятичную (BigDecimal).

.

int bits = Integer.parseInt(s,2); 
float value = Float.intBitsToFloat(bits); 
BigDecimal asDecimal = BigDecimal.valueOf(value); 
1

32 бит число в виде строки может быть проанализирован в целое число при выполнении

String s = "00111111100000000000000000000000"; 
int myInt= Integer.parseInt(s, 2); 

пытается разобрать ту же строку, поплавок сломается преобразование с момента поплавков

определяются как знак + экспонента + mantissa, который является совершенно другим представлением, чем 2-х дополненный, подписанный int

+0

Нет, OP сказал в комментарии, что двоичная строка является представлением 'float', а не' int' -представлением его числа. Это не делает то, что он просил. –