43 if not isinstance(decimal_digits, int):
44 raise TypeError,
'number of decimals must be an integer'
45 if decimal_digits < 0:
46 raise ValueError,
'number of decimals must be non-negative'
56 assert s[0] ==
'0' and s[1] ==
'x'
60 assert s[pos + 1] ==
'+' or s[pos + 1] ==
'-'
61 mant, exp = s[:pos], int(s[pos + 1:])
73 bits.append((d >> 3) & 1)
74 bits.append((d >> 2) & 1)
75 bits.append((d >> 1) & 1)
76 bits.append((d >> 0) & 1)
80 bits_after = [0] * -(exp + 1) + bits
82 while len(bits) < exp + 1:
84 bits_before = bits[:exp + 1]
85 bits_after = bits[exp + 1:]
87 while bits_after
and bits_after[-1] == 0:
89 while len(bits_after) % 4 != 0:
92 before = str(sum(b << i
for i, b
in enumerate(reversed(bits_before))))
94 for i
in xrange(0, len(bits_after), 4):
95 after +=
'0123456789abcdef'[(bits_after[i] << 3) +
96 (bits_after[i + 1] << 2) +
97 (bits_after[i + 2] << 1) +
100 if decimal_digits == 0:
103 return sign +
':' + after
104 return sign + before +
':' + after
109 if len(before) < decimal_digits:
110 before =
'0' * (decimal_digits - len(before)) + before
111 before0 = before[:-decimal_digits]
112 before1 = before[-decimal_digits:]
114 if before1 ==
'0' * decimal_digits:
117 return sign +
':' + after
118 return sign + before0 +
'.' + before1 +
':' + after
122 return sign + before0
125 return sign + before0 +
'.' + before1 +
':' + after
127 return sign + before0 +
'.' + before1.rstrip(
'0')
134 if not isinstance(s, str)
and not isinstance(s, unicode):
135 raise TypeError,
'invalid argument type (must be str or unicode)'
136 if not isinstance(decimal_digits, int):
137 raise TypeError,
'number of decimals must be an integer'
138 if decimal_digits < 0:
139 raise ValueError,
'number of decimals must be non-negative'
141 if s
and s[0] ==
'-':
156 if not after
and not s:
159 if decimal_digits == 0:
168 if s
and after
is not None:
174 before1 = s[pos + 1:]
175 if not before0
and not before1:
177 if len(before1) < decimal_digits:
178 if after
is not None:
180 before1 = before1 + (decimal_digits - len(before1)) *
'0'
182 if len(before1) > decimal_digits:
188 for c
in before0 + before1:
189 if c
not in '0123456789':
192 if c
not in '0123456789abcdef':
200 x = float(int(before0) * 10 ** decimal_digits + int(before1)) + \
201 float(int(after, 16)) / float(1 << len(after) * 4)
def format
Convert a floating-point number to its hybrid string representation.
def parse
Convert a hybrid string representation to a floating-point number.