This commit is contained in:
2026-07-28 06:49:43 +02:00
parent 0d5a8c2f6e
commit 85cad507a4
+27 -2
View File
@@ -57,5 +57,30 @@ class f32: pass
@pwp_number("<d", float)
class f64: pass
@pwp_number("<BiI", Decimal)
class decimal: pass
class decimal:
size = struct.calcsize("<qb")
def __init__(self, value):
self.value = Decimal(value)
def to_com(self):
sign, digits, exponent = self.value.as_tuple()
if not isinstance(exponent, int):
raise ValueError("Cannot serialize NaN or Infinity")
scale = -exponent
integer = int("".join(map(str, digits)))
if sign:
integer = -integer
return struct.pack("<qb", integer, scale)
@classmethod
def from_com(cls, data, offset=0):
integer, scale = struct.unpack_from("<qb", data, offset)
value = Decimal(integer) / (Decimal(10) ** scale)
return cls(value), offset + cls.size