void main() {
int an=1;
string hex='3FCBD07D';
hex = hex.replaceAll(RegExp(r"\s+"), "");
if (hex == "") {
print("空");
}
if (hex == "00000000") {
print("0");
}
if ((hex.length > 8) || (hexToInt(hex).isNaN)) {
print("Error");
}
if (hex.length < 8) {
hex = fillString(hex, "0", 8, true);
}
hex = hexToInt(hex).toRadixString(2);
hex = fillString(hex, "0", 32, true);
var s = hex.substring(0, 1);
var e = hex.substring(1, 9);
var m = hex.substring(9);
int ie = int.parse(e, radix: 2) - 127;
m = "1" + m;
if (ie >= 0) {
m = m.substring(0, ie + 1) + "." + m.substring(ie + 1);
} else {
m = "0." + fillString(m, "0", m.length - ie - 1, true);
}
if (m.indexOf(".") == -1) {
m = m + ".0";
}
var a = m.split(".");
var mi = int.parse(a[0], radix: 2);
double mf = 0;
for (var i = 0; i < a[1].length; i++) {
mf += (int.parse(a[1].substring(i, i + 1)) * math.pow(2, -(i + 1)));
}
m = (mi + mf).toStringAsFixed(an);
if (s == "1") {
m = (0 - double.parse(m)).toStringAsFixed(an);
}
print(m);
}
static fillString(String t, String c, int n, bool b) {
if ((t == "") || (c.length != 1) || (n <= t.length)) {
return t;
}
var l = t.length;
for (var i = 0; i < n - l; i++) {
if (b == true) {
t = c + t;
} else {
t += c;
}
}
return t;
}