
import std.stdio, std.ascii, std.conv, std.math, std.string;

uint strToUint(string str) {
  char[] chars = str.to!(char []);
  uint res = 0;
  foreach(i, c; chars) {
    uint n;
    if (isAlpha(c)) n = (c - 'a') + 10;
    else if (isDigit(c)) n = c - '0';
    res += n;
    if (i != 7) res <<= 4;
  }
  return res;
}

int digit(int n) {
  int counter = 0;
  while(n != 0) {
    n /= 10;
    counter++;
  }
  return counter;
}

void show(uint n) {
  double dec = 0.0;
  int integer = 0;
  int len = 0;
  // 整数部の計算
  for(int i = 7; i < 31; i++) {
    integer += (((1 << i) & n) >> 7);
  }
  // 小数部の計算
  for(int i = 0; i < 7; i++) {
    if (((1 << (6 - i)) & n) != 0) {
      int k = pow(5, i + 1);
      dec = k / pow(10.0, digit(k));
    }
  }
  // 符号ビット
  if (((n >> 31) & 1) == 1) write("-");
  write(integer, ".");
  do {
    dec *= 10;
    if (dec == 0) write("0");
    else writef("%1d", (dec % 10).to!(int));
    dec = dec - floor(dec);
    len++;
  } while (dec != 0 && len < 8);
  writeln;
}

void main() {
  for(int n; readf("%d\n", &n);) {
    foreach(t; 0..n) {
      readln.chomp.strToUint.show;
    }
  }
}