2424import struct
2525from abc import ABC , abstractmethod
2626from datetime import date , datetime , time
27- from decimal import ROUND_DOWN , ROUND_HALF_UP , Decimal
27+ from decimal import ROUND_HALF_UP , Decimal
2828from functools import singledispatchmethod
2929from math import isnan
3030from typing import Any , Generic
@@ -555,7 +555,8 @@ def _(self, _: StringType) -> Literal[str]:
555555 @to .register (IntegerType )
556556 def _ (self , type_var : IntegerType ) -> Literal [int ]:
557557 try :
558- number = int (Decimal (self .value ).to_integral_value (rounding = ROUND_DOWN ))
558+ dec = Decimal (self .value )
559+ number = int (self .value ) if dec .as_tuple ().exponent == 0 else int (float (self .value ))
559560
560561 if IntegerType .max < number :
561562 return IntAboveMax ()
@@ -568,7 +569,8 @@ def _(self, type_var: IntegerType) -> Literal[int]:
568569 @to .register (LongType )
569570 def _ (self , type_var : LongType ) -> Literal [int ]:
570571 try :
571- long_value = int (Decimal (self .value ).to_integral_value (rounding = ROUND_DOWN ))
572+ dec = Decimal (self .value )
573+ long_value = int (self .value ) if dec .as_tuple ().exponent == 0 else int (float (self .value ))
572574 if LongType .max < long_value :
573575 return LongAboveMax ()
574576 elif LongType .min > long_value :
0 commit comments